종료된 프로세스의 TCP 포트 재사용

종료된 프로세스의 TCP 포트 재사용

Linux에 TCP 서버 프로세스가 있습니다. 때로는 종료될 수도 있으며 SIGKILL그 후에 상위 프로세스가 다시 시작됩니다. 나는 아이들이 죽는 방식을 바꿀 수 없습니다. 때때로(약 100회마다) 서버 포트가 아직 사용 중이기 때문에( bind반환됨 EADDRINUSE) 다시 시작이 실패합니다. 서버에서 명시적으로 설정한 소켓 옵션은 O_RDWR, O_NONBLOCK TCP_NODELAY및 입니다.SO_REUSEADDRTCP_USER_TIMEOUT

내 질문은 다음과 같습니다

  1. 비차단 TCP 소켓 작업이 있는 프로세스가 종료되면 해당 버퍼가 플러시되어 TIME_WAIT상위 프로세스가 버퍼를 가져오기 전에 포트에 삽입 됩니까 SIGCHILD?

  2. 상위 프로세스가 SIGCHILD종료된 하위 프로세스를 획득하면 하위 프로세스가 사용하는 포트를 재사용할 수 있다는 것이 보장됩니까 SO_REUSEADDR?

  3. 이 동작은 Linux 커널과 Mac마다 다릅니까?

관련 정보