TCP 고객, 서버(fork식)
정상 가동 tcpserver &
netstat-a를 사용하여 관찰할 수 있습니다. 플러그인을 감청하는 state는 LISTEN이어야 합니다. 연결을 만든 후에 새로운 연결을 볼 수 있습니다.
정상 중지
클라이언트가 중단 명령을 실행하여 FIN_ 에 들어갑니다.WAIT_1 상태(FIN 발송), 서버에 수락된 ACK가 FIN_WAIT_2, 서버에 FIN을 수락하고 ACK를 전송하면 TIME_WAIT, 2MSL을 기다린 후 정식으로 종료합니다.
참고:
하면, 만약, 만약...WAIT_1 상태 시 FIN(서버 종료 요구)이 수신되면 ACK를 보내고 Closing 상태로 들어가고 서버의 ACK를 받으면 TIME_WAIT 상태.
하면, 만약, 만약...WAIT_1 상태가 FIN 및 ACK(서버 응답 끄기 및 끄기 요청)에 수락되면 ACK를 보내 TIME_로 바로 이동합니다.WAIT 상태.
서버가 클라이언트로부터 FIN을 받은 후 ACK를 보내고 CLOSE_WAIT 상태, 이후 서버에서도 FIN 전송, LAST_ACK 상태, 클라이언트의 ACK를 수락한 후 정식으로 닫습니다.
하위 프로세스
하위 프로세스가 종료되면 SIGCHLD 신호가 전송되지만 부모 프로세스는 기본적으로 처리되지 않으며 하위 프로세스는 경직되어 자원이 회수되지 않습니다.프로세스가 끊어지면 모든 하위 프로세스가 경직되어 부모 프로세스에 맡겨집니다.처리 방법:wait 함수를 호출하여 신호 처리 함수를 설정할 수 있습니다.하위 프로세스가 종료되면 이 신호를 부모 프로세스에 보내고 연결된 신호 처리 함수를 실행합니다.부모 프로세스가 중단되었을 때 시스템 호출 (예: accept) 에 막혀 있다면, accept는 EINTER 오류를 되돌려줍니다. 부모 프로세스는 이 값을 처리해야 합니다.(SA_RESTART 플래그를 설정하여 중단된 시스템 호출을 자동으로 재부팅할 수 있음)
신호
일단 신호 처리 함수가 설치되면 계속 설치되어 있다.이 신호를 처리할 때, 이 신호는 막힌 (즉 다시 이 신호를 일으킬 수 없음) 동시에sa_를 설정할 수 있습니다mask, 그 중에서 지정한 신호도 막힙니다.만약 신호가 막힐 때 여러 번 발생하지만, 막힌 것을 풀면 한 번만 더 유발할 수 있다.
신호 처리 함수
void handler(int signo);
signal
void (*signal(int signo, void (*func)(int))) (int);
typedef void Sigfunc(int);
Sigfunc signal(int signo, Sigfunc *func);
경직자 프로세스를 정확하게 처리하다
신호 처리 함수에서wait를 호출하면 한 번에 한 개의 하위 프로세스만 정리할 수 있지만 여러 개의 하위 프로세스가 동시에 사망할 수 있습니다. 그러면 처리할 수 없습니다. (신호 처리 함수가 실행될 때 여러 번 이 신호를 한 번만 기억하기 때문입니다.)신호 처리 함수에서waitpid 및 WNOHANG 옵션을 사용해야 합니다.while((pid = waitpid(-1, &stat, WNOHANG)) >0)
//
특수한 상황
accept 반환 전 연결 종료
세 번의 악수가 끝난 후 클라이언트가 RST를 보낸 것이다.이런 상황은 운영체제가 다르면 차이가 있다. 커널에서 처리하거나 서버 프로세스가 보이지 않거나 EPROTO나 ECONNABORTED로 되돌아간다.
서버 프로세스 종료
예를 들어kill이 서버 프로세스를 떨어뜨리면 클라이언트에게 FIN을 보냅니다. 클라이언트에게 서버는 데이터를 더 이상 보내지 않을 뿐입니다. 클라이언트가 write를 호출하면 서버는 RST에 응답하고 클라이언트가read를 호출하면 EOF로 돌아갑니다.
하면, 만약, 만약...
RST를 무시하고 계속 쓰면 커널이 프로세스에 SIGPIPE 신호를 보내게 됩니다. 이 신호의 기본 동작은 프로세스를 종료하는 것입니다.
서버 호스트 충돌
클라이언트가 read를 호출하면 차단되고 최종적으로 ETIMEOUT 또는 EHOSTUNREACH 또는 ENETUNREACH를 얻을 수 있습니다.
서버 호스트 충돌 후 재부팅
이전의 모든 링크 정보를 잃어버렸기 때문에 서버는 RST에 응답합니다(클라이언트가 ECONNRESET를 받았습니다).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
tcpserver &
클라이언트가 중단 명령을 실행하여 FIN_ 에 들어갑니다.WAIT_1 상태(FIN 발송), 서버에 수락된 ACK가 FIN_WAIT_2, 서버에 FIN을 수락하고 ACK를 전송하면 TIME_WAIT, 2MSL을 기다린 후 정식으로 종료합니다.
참고:
하면, 만약, 만약...WAIT_1 상태 시 FIN(서버 종료 요구)이 수신되면 ACK를 보내고 Closing 상태로 들어가고 서버의 ACK를 받으면 TIME_WAIT 상태.
하면, 만약, 만약...WAIT_1 상태가 FIN 및 ACK(서버 응답 끄기 및 끄기 요청)에 수락되면 ACK를 보내 TIME_로 바로 이동합니다.WAIT 상태.
서버가 클라이언트로부터 FIN을 받은 후 ACK를 보내고 CLOSE_WAIT 상태, 이후 서버에서도 FIN 전송, LAST_ACK 상태, 클라이언트의 ACK를 수락한 후 정식으로 닫습니다.
하위 프로세스
하위 프로세스가 종료되면 SIGCHLD 신호가 전송되지만 부모 프로세스는 기본적으로 처리되지 않으며 하위 프로세스는 경직되어 자원이 회수되지 않습니다.프로세스가 끊어지면 모든 하위 프로세스가 경직되어 부모 프로세스에 맡겨집니다.처리 방법:wait 함수를 호출하여 신호 처리 함수를 설정할 수 있습니다.하위 프로세스가 종료되면 이 신호를 부모 프로세스에 보내고 연결된 신호 처리 함수를 실행합니다.부모 프로세스가 중단되었을 때 시스템 호출 (예: accept) 에 막혀 있다면, accept는 EINTER 오류를 되돌려줍니다. 부모 프로세스는 이 값을 처리해야 합니다.(SA_RESTART 플래그를 설정하여 중단된 시스템 호출을 자동으로 재부팅할 수 있음)
신호
일단 신호 처리 함수가 설치되면 계속 설치되어 있다.이 신호를 처리할 때, 이 신호는 막힌 (즉 다시 이 신호를 일으킬 수 없음) 동시에sa_를 설정할 수 있습니다mask, 그 중에서 지정한 신호도 막힙니다.만약 신호가 막힐 때 여러 번 발생하지만, 막힌 것을 풀면 한 번만 더 유발할 수 있다.
신호 처리 함수
void handler(int signo);
signal
void (*signal(int signo, void (*func)(int))) (int);
typedef void Sigfunc(int);
Sigfunc signal(int signo, Sigfunc *func);
경직자 프로세스를 정확하게 처리하다
신호 처리 함수에서wait를 호출하면 한 번에 한 개의 하위 프로세스만 정리할 수 있지만 여러 개의 하위 프로세스가 동시에 사망할 수 있습니다. 그러면 처리할 수 없습니다. (신호 처리 함수가 실행될 때 여러 번 이 신호를 한 번만 기억하기 때문입니다.)신호 처리 함수에서waitpid 및 WNOHANG 옵션을 사용해야 합니다.while((pid = waitpid(-1, &stat, WNOHANG)) >0)
//
특수한 상황
accept 반환 전 연결 종료
세 번의 악수가 끝난 후 클라이언트가 RST를 보낸 것이다.이런 상황은 운영체제가 다르면 차이가 있다. 커널에서 처리하거나 서버 프로세스가 보이지 않거나 EPROTO나 ECONNABORTED로 되돌아간다.
서버 프로세스 종료
예를 들어kill이 서버 프로세스를 떨어뜨리면 클라이언트에게 FIN을 보냅니다. 클라이언트에게 서버는 데이터를 더 이상 보내지 않을 뿐입니다. 클라이언트가 write를 호출하면 서버는 RST에 응답하고 클라이언트가read를 호출하면 EOF로 돌아갑니다.
하면, 만약, 만약...
RST를 무시하고 계속 쓰면 커널이 프로세스에 SIGPIPE 신호를 보내게 됩니다. 이 신호의 기본 동작은 프로세스를 종료하는 것입니다.
서버 호스트 충돌
클라이언트가 read를 호출하면 차단되고 최종적으로 ETIMEOUT 또는 EHOSTUNREACH 또는 ENETUNREACH를 얻을 수 있습니다.
서버 호스트 충돌 후 재부팅
이전의 모든 링크 정보를 잃어버렸기 때문에 서버는 RST에 응답합니다(클라이언트가 ECONNRESET를 받았습니다).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
void handler(int signo);
void (*signal(int signo, void (*func)(int))) (int);
typedef void Sigfunc(int);
Sigfunc signal(int signo, Sigfunc *func);
while((pid = waitpid(-1, &stat, WNOHANG)) >0)
//
accept 반환 전 연결 종료
세 번의 악수가 끝난 후 클라이언트가 RST를 보낸 것이다.이런 상황은 운영체제가 다르면 차이가 있다. 커널에서 처리하거나 서버 프로세스가 보이지 않거나 EPROTO나 ECONNABORTED로 되돌아간다.
서버 프로세스 종료
예를 들어kill이 서버 프로세스를 떨어뜨리면 클라이언트에게 FIN을 보냅니다. 클라이언트에게 서버는 데이터를 더 이상 보내지 않을 뿐입니다. 클라이언트가 write를 호출하면 서버는 RST에 응답하고 클라이언트가read를 호출하면 EOF로 돌아갑니다.
하면, 만약, 만약...
RST를 무시하고 계속 쓰면 커널이 프로세스에 SIGPIPE 신호를 보내게 됩니다. 이 신호의 기본 동작은 프로세스를 종료하는 것입니다.
서버 호스트 충돌
클라이언트가 read를 호출하면 차단되고 최종적으로 ETIMEOUT 또는 EHOSTUNREACH 또는 ENETUNREACH를 얻을 수 있습니다.
서버 호스트 충돌 후 재부팅
이전의 모든 링크 정보를 잃어버렸기 때문에 서버는 RST에 응답합니다(클라이언트가 ECONNRESET를 받았습니다).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.