send() 시에 Broken pipe..
글쓴이: dotri / 작성시간: 화, 2005/06/14 - 1:41오후
상대방이 close() 한 소켓으로 send() 할 경우, Broken pipe 가 발생한다고 알고 있습니다.
그러면 상대가 close() 한것을 미리 알아야 send() 를 할지, close() 를 할지 결정할 수 있게 되어야 하는게 아닌가요? 이거 예외처리할 여지조차 없이 그냥 프로그램이 죽어버리니 환장하겠네요.
send() 함수가 0 을 리턴하는것도 아니고 그냥 무조건 Broken pipe 라고 죽어버립니다. 이런 상황을 어떻게 해결해야하나요?
Forums:
저는 SIG_PIPE는 무조건 ignore하고 봅니다.. 원래대로라면 s
저는 SIG_PIPE는 무조건 ignore하고 봅니다.. 원래대로라면 send()에 0이 한 번 리턴되고 그 다음번에 send()할 때 SIG_PIPE가 나는 것이 맞을 것 같은데, 그냥 SIG_PIPE가 나는 경우가 있더군요. 때문에 그냥 ignore 먼저 하고 봅니다. 누군가 좀 더 자세한 이유를 설명해 주시면 감사하겠습니다. ㅎㅎ;
일단은 happycat님 말씀대로 SIG_PIPE가 전혀 도움이 되지 못
일단은 happycat님 말씀대로 SIG_PIPE가 전혀 도움이 되지 못하는 상황에서는
애초부터 ignore 시키고 들어가는게 맞다고 봅니다.
signal 함수를 이용하면 쉽게 제어할 수 있구요(broken pipe로 검색해 보시면 많이 나옵니다 ^^)
근데 이 시그널이 발생하는 시점이 정말 정확히 어떻게 되나요?
잘못된 디스크립터에 write를 한다고 해서 매번 발생하는것도 아니지 않나요?
----
jai guru deva om...
댓글 달기