SIGPIPE 를 좀 발전 시키려면..

익명 사용자의 이미지

네트워크 프로그램에서
RST 패킷(또는 응답)을 보낸 포트(소켓에) 글을 썼을때
그 프로세스에 SIGPIPE의 신호가 걸리는 것으로 알고있습니다.

지금은 그 때에 그 신호를 무시 하게 해 놓았는데
제가 어떠한 배열을 가지고 (SELECT때문에) 소켓들의 상태를 저장해 놓았습
니다. 그러니깐 제가 궁금한것은 그 RST보낸 소켓을 저장에서 제외하는 것입
니다.

따라서 signal(SIGPIPE,SIG_IGN) 을. 시그날 핸들러 함수를 이용하여
조그음 바꾸어 보고싶은데.
시그날 핸들러 함수에 어떠한 값을 전달 시킬수는 없는 것일까요??
... int 인자로 받아 보면 시그날 넘버만 전달이 되네요.

익명 사용자의 이미지

글쎄요.

마땅한 방법이 떠오르지 않네요.

전역변수 쓰시면..편하게 하실수 있을듯 하네요.

물론..충돌이 일어날수 있으니..

mutex 같은것으로 보호해 주면 좋겠죠..~~~

익명 사용자의 이미지

RST 패킷을 받은 fd는 select를 걸었을때..
FD_ISSET으로 체크를 해보면 read 이벤트를 받을 수 있습니다.

그래서 read로 읽어 보면 0을 리턴하게 되지요..

즉 읽기를 했을때, 0이거나 0보다 작으면 소켓에 문제가 있으니깐
님이 관리하는 소켓 배열을 정리해주고
내가 열었던 소켓도 정리를 해주면 될것 같네요..