끊어진 소켓에 send 혹은 write 하지 않기
글쓴이: jagalchee / 작성시간: 토, 2004/03/27 - 1:37오후
아래에 Broken Pipe 에러를 해결하는 방법을 질문드렸었습니다.
몇몇분들의 답변 덕택에, 시그널을 무시하는 방법은 제가 터득했습니다만..
제일 마지막으로 답변해주신 분의..."끊어진 소켓에 send 혹은 write 를 아예 하지 못하게 하는 방법" 에 대해서는 C 로 어떻게 구현을 하면 되는것인지 구체적으로 궁금합니다.
시그널을 무시하는 것보다는, 끊어진 소켓에 대해서는 send 혹은 write 를 아예 하지 못하도록 하는것이 가장 원초적으로 좋은 방법이라 생각됩니다..
아시는 분께서는 답변 부탁드립니다.
Forums:
아마도 의도가 시그널을 계속 무시한다는 것 보다는...아예 rea
아마도 의도가 시그널을 계속 무시한다는 것 보다는...
아예 read/write를 안하려고해도 우선은 끊어진줄 알아야 하니까,
시그널이 처음 발생했을때 해당 소켓을 close해서 없앤단 얘기겠죠.
그리고 어짜피 가지고 있어봤자 끊어진게 다시 이어질리도 없구요
깔끔하게 리소스를 정리해버리는게 좋습니다.
그 이후는 정해진 예외처리 지침이있다면 그대로 수행하구요.
안녕하세요..제가 말한건 간단한 의도에서 말씀드린겁니다..
안녕하세요..
제가 말한건 간단한 의도에서 말씀드린겁니다..
일단 단일 프로세스라면 소켓이 끈어지는 순간과 소켓에
write하는순간에 프로세스 경쟁이 일어나지 않기때문에..
끈어짐 처리나 시그널을 받는순간 접속리스트에서 제외시켜버리는겁니다.
select경우는 끈어진 소켓에대하여 바로 FD 리스트에서 제외시키고
close해주고 write되는일이 없게 하는것이지요..
멀티쓰레드도 물론 비슷하겠지만 컨텍스트 스위치에 대하여 명확하게
시점 처리가 필요할것같습니다.
' 형식이 내용을 규정한다. '
그런데.. 문제는 끊어짐의 신호를 못받고 끊겼을 경우..랜선이 뽑혔다
그런데.. 문제는 끊어짐의 신호를 못받고 끊겼을 경우..
랜선이 뽑혔다거나.. 혹은,, 파워가 나갔다거나..
이런 경우에는 전혀 모른체로 write/read를 시도하게됩니다.
이럴 결우를 대비해서.. 두가지를 사용하는데요..
한가지는 icmp로 통신의 연결 상태를 지속적으로 감지하는 것이니다.
그래서 문제가 발생하면 바로 접속을 끊어 버리죠..
다른 하나는.. write 나 read 하였을 때 리턴 값이
write나 read된 만큼의 길이를 인데요. 이 갚이 0이면서..
세번 동안 연속 0일 경우에 접속에 문제가 생겼구나하고 ...
1분 동안 sleep 하다가 다시 1분뒤에 write 해보고..
자원을 해제하면 될듯 싶네요..^_^;; 열심히 해보셔요..
댓글 달기