TCP 연결유지 변경 후 broken pipe 에러 발생
글쓴이: iamkimst / 작성시간: 금, 2009/11/06 - 3:27오후
안녕하세요. TCP 통신을 이용하여 데이터를 전송하고 있습니다.
연결 방법을 전송 후 연결종료에서 연결유지로 변경한 후 broken pipe 에러가 지속적으로 발생하고 있습니다.
클라이언트와 서버는 1:1로 연결되어 있습니다.
서버를 재시작하면 항상 broken pipe 에러가 발생하고, 그 외 랜덤하게 에러가 발생합니다.
여러개의 글을 읽어 봤지만, 어디서 부터 에러를 확인해야 하는지 알 수가 없습니다.
해당 현상에 대한 가이드 좀 부탁드리겠습니다.
Forums:
실제로 끊어졌기 때문입니다.
Broken pipe 가 발생한 것은 실제로 통신 연결이 끊어진 것입니다.
그리고 서버를 죽였다 살리면 당연히 Process 자체가 죽었으니까.
해당 프로세스가 사용하고 있던 모든 자원은 운영체제로 반환된 것입니다.
그래서 그 경우에는 당명히 Broken Pipe가 발생하겠죠.
안 발생한 것이 이상한 것입니다.
나머지 가끔 끊어지는 문제는 네트워크가 불안하거나(하드웨어적인 문제).
아니면 서버쪽에서 끊었거나, 아니면 클라이언트에서 끊은 것입니다.
위 경우들을 제외하고는 실제로 연결이 끊어지는 것은 불가능합니다.
패킷캡처
저는 모니터링 시스템을 운영하고 있습니다.
TCP 오류를 확인할 때는 wireshark(구. ethereal)를 서버 또는 클라이언트에 설치하여 활용하고 있습니다.
서버와 클라이언트 사이에 메시지를 주고 받지 않더라도 연결상태를 계속 유지해야 하는 경우에
원인불명 연결이 끊어지는 경우는 많았습니다.
제가 운영하는 시스템은 인터넷(ADSL)과 VPN으로 구성하였는데요. 특히 ADSL의 경우 24시간 365일 계속
연결하기 매우 어렵습니다.
별도의 네트워크 모니터링 프로그램이 일정한 간격으로 PING 명령을 보내지만 새벽시간이라던지
모뎀 주변 공사 등으로 인해 네트워크가 단절되는 경우가 있습니다.
클라이언트의 네트워크 카드라든지 모뎀의 고장인 경우도 더러 있습니다.
"Borken Pipe"는 소켓프로그래밍시 오류라고 한다면
1) 최초의 누가 어디로 접속하는지 궁금하네요.
우리 시스템의 경우 자료를 생성하고 보내는 쪽에서 포트를 열고 접속해 오기를 기다립니다.
그리고 역할을 이렇게 불러요. 서버와 클라이언트보다 매니저와 에이전트로 말이죠.
에이전트가 주로 자료를 생성하고 보내는 쪽입니다.
그러면 매니저가 에이전트에게 일정 시간 간격으로 자료를 요청하거나 메시지를 전달합니다.
2) TCP 위의 애플레케이션 계층의 프로토콜은 무엇인가요?
흠
@.@
끊어진 소켓번호에 write 할때 발생하는 오류이고요
아래와 같이 한줄 추가하시면 될듯..
signal(SIGPIPE,SIG_IGN);
@.@
댓글 달기