![connect()가 여러 번 성공한 후 connect()가 3초 동안 차단되었습니다.](https://linux55.com/image/19125/connect()%EA%B0%80%20%EC%97%AC%EB%9F%AC%20%EB%B2%88%20%EC%84%B1%EA%B3%B5%ED%95%9C%20%ED%9B%84%20connect()%EA%B0%80%203%EC%B4%88%20%EB%8F%99%EC%95%88%20%EC%B0%A8%EB%8B%A8%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
connect()
서버에 연결하고 for 루프에서 서버를 닫는 클라이언트 애플리케이션을 작성 중입니다 .
이는 차단 모드에서 수행되며 일부 호출은 수천 번의 성공 후 약 3초 동안 차단되는 connect()
것으로 나타났습니다 . tcpdump를 사용했는데 몇 가지 이상한 결과를 발견했습니다. 호출 후 약 3초 동안 SYN이 전송되지 않았습니다.connect()
connect()
connect()
무슨 일이에요?
추신. 저는 64비트 Ubuntu, 커널 3.0.0-13을 사용하고 있습니다.
답변1
bind
아마도 전화하기 전에 전화를 하지 않았을 가능성이 높습니다 connect
(이는 정상적인 현상이며 이렇게 해야 할 이유가 없습니다). 따라서 이전에는 connect
암시적인 bind
. 로컬 포트의 사용 가능한 범위가 소진된 경우 bind
해당 포트를 기다리는 동안 차단이 발생할 수 있습니다. 가장 좋은 솔루션은 수행하려는 작업에 따라 다릅니다. 자세한 내용은 내 의견을 참조하세요. 해결 방법을 제안해 드릴 수 있습니다.