2014-05-22 7 views
2

대기 시간이 중요한 곳에 작은 네트워킹 프로그램을 작성하고 있습니다. 일부 시스템 호출에서 실행이 차단 된 모든 가능한 경우를 포착하고 싶습니다.일정 기간 동안 실행을 닫을 수 있습니까?

나는 connect이 몇 초 동안 실행을 차단할 수 있음을 알고 있습니다. read 데이터를 사용할 수있을 때까지 차단. write은 시스템 버퍼에 충분한 공간이있을 때까지 차단됩니다. 질문 : 얼마 동안 close 실행을 차단할 수 있습니까? 그렇다면 비 블로킹 소켓을 사용하여 해결할 수 있습니까?

저는 Linux에서 작업하고 있습니다. 그러나 다른 시스템에 대해서도 배우는 것은 흥미 롭습니다.

+0

예, 'close'도 차단할 수 있습니다. 차단 동작을 원하지 않으면 비 차단 소켓을 사용하십시오. 모든 상황에 적용됩니다. –

+0

@JoachimPileborg : 비 차단 소켓에서'close'가 차단되지 않으면, 0이 반환되면 연결이 제대로 닫혔는지 확인할 수 있습니까? – Marian

+1

좋아요, 나는 왜 close 호출이 차단 될 수 있는지에 대한 이유를 오해하고 있습니다. 소켓 블로킹 또는 블로킹 상태와 아무 관계가 없지만 SO_LINGER 소켓 옵션으로 제어됩니다. 예 : [이 오래된 질문 그래서] (http://stackoverflow.com/questions/6418277/how-to-close-a-non-blocking-socket). –

답변

2

예 닫기로 차단할 수 있습니다. 동일한 스레드에서 recv/send 호출에서 차단 된 다른 스레드가있을 때 발생합니다.

이것을 방지하려면 비 블로킹 소켓을 사용하십시오.

관련 문제