![종료된 프로세스의 TCP 포트 재사용](https://linux55.com/image/159197/%EC%A2%85%EB%A3%8C%EB%90%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98%20TCP%20%ED%8F%AC%ED%8A%B8%20%EC%9E%AC%EC%82%AC%EC%9A%A9.png)
Linux에 TCP 서버 프로세스가 있습니다. 때로는 종료될 수도 있으며 SIGKILL
그 후에 상위 프로세스가 다시 시작됩니다. 나는 아이들이 죽는 방식을 바꿀 수 없습니다. 때때로(약 100회마다) 서버 포트가 아직 사용 중이기 때문에( bind
반환됨 EADDRINUSE
) 다시 시작이 실패합니다. 서버에서 명시적으로 설정한 소켓 옵션은 O_RDWR
, O_NONBLOCK
TCP_NODELAY
및 입니다.SO_REUSEADDR
TCP_USER_TIMEOUT
내 질문은 다음과 같습니다
비차단 TCP 소켓 작업이 있는 프로세스가 종료되면 해당 버퍼가 플러시되어
TIME_WAIT
상위 프로세스가 버퍼를 가져오기 전에 포트에 삽입 됩니까SIGCHILD
?상위 프로세스가
SIGCHILD
종료된 하위 프로세스를 획득하면 하위 프로세스가 사용하는 포트를 재사용할 수 있다는 것이 보장됩니까SO_REUSEADDR
?이 동작은 Linux 커널과 Mac마다 다릅니까?