TCP 연결을 기다리는 중 pselect
이 실행 중입니다. 그 pselect
자체 스레드에서 실행되고, 따라서 나는 그들을 실행하는 무리가 있습니다.TCP 소켓이 닫히지 않음
나는 pselect
에 대한 제한 시간을 설정했지만 sockstat
을 실행하면 절대로 닫히지 않는 연결이있는 것 같습니다. 99 %가 그 중 하나입니다. 연결을 모두 만들고있는 클라이언트를 닫을 때, 나는 타임 아웃 기간 후에 소켓을 닫을 수 있다고 생각할 것입니다. 반환 값이 0인지 확인하기 위해 중단 점을 넣었지만 결코 발생하지 않습니다. 사이비에서
이 내가
if((ret == pselect(..., timeout, NULL) <0){
//check errors
} else if (ret == 0)
{
//close connection for timing out
//I never land here, even though I can close the client side (thus presumably closing the connection)
}
다른 내가 그건 내 문제가있는 경우 디버깅하기 위해 할 수있는 무엇인가? sockstat에서 볼 수는 있지만 정확히 어떤 소켓 fd가 열려 있는지 알려주는 것은 어렵습니다.
... 나는 try..I했던이 세트의 FD의의를 확인하기 위해 다른 다른 블록을 제공하지만 것이다 (당신이있어이 사건은
POLLHUP
poll()
의 용어입니다) 나는 단지 다른 것을 잡았다 고 생각하지 않는다. – Derek@Derek : 원격지에 닫힌 소켓이있는 것을 볼 수있는 것보다 다른 절에서 catch-all'else'가 필요 없다. 읽기 세트와'recv'는'ECONNRESET'을 리턴 할 것입니다. –
피어가 정상적으로 연결 해제되면 0을 반환합니다. – EJP