2012-10-15 2 views
1

그래서 내 응용 프로그램의 시작에 나는 내 응용 프로그램이 SIGPIPE를 무시했을 생각 리눅스 SIGPIPE 충돌 서버를

signal(SIGPIPE, SIG_IGN); 

를 호출합니다. FD는 INT (파일 기술자) 및 크기

write(fd, outgoingStr->c_str(), size); 

문자열의 크기 :하지만 난 여전히 다음 코드를 SIGPIPE 충돌을 얻었다. 여기서 내가 뭘 잘못하고 있니?

사이드 노트에서 나는 최근에 그 안에 쓰는 것을 사용합니다. 오류 값이 반환되었는지 확인하기 위해 if를 사용하고, 제거 될 때까지 SIGPIPE가 충돌하지 않았다고 생각합니다. if 검사는 오류가있는 경우 콘솔에 알려주지 않으므로 관련성 여부는 확실하지 않습니다.

+1

당신은 SIGPIPE를 얻고 있습니까? 예 : 신호가 아니라 어떤 다른 오류가 아니라는 증거가 있습니까? –

+0

이전 래퍼가 콘솔에 아무것도 쓰지 않았지만 정말로 쓸모가 있으십니까? 또한 출구 또는 뭔가? EPIPE를 써야합니다. – Duck

+0

gdb는 그것이 SIGPIPE라고 말했고 문제로 쓰기 호출을 지적했습니다. 내 프로그램은 연결이 끊어진 소켓에서 쓰는 것을 무시해야하므로 이전 래퍼가 종료되지 않았습니다. 물론 SIGPIPE 오류는 클라이언트가 제대로 종료하지 않을 때만 무작위로 발생하므로 테스트하기가 어렵습니다. –

답변

2

GDB가 무시되는 경우에도 SIGPIPE에서 멈추는 문제가 발생했습니다. 응용 프로그램을 정상적으로 실행하면 의도 한대로 작동합니다.