Linux TCP 소켓을 통해 통신하는 네트워크 응용 프로그램을 작성합니다. 최근에 내 시스템 콜이 내 응용 프로그램을 망가 뜨리는 것을 보았습니다. 두 동료가 모두 작동하면 잘 작동합니다 (지금 충돌 복구를 테스트 중입니다). 그러나 한 피어가 다운되면 두 번째 코드가 실행되면서 충돌합니다.Linux TCP 소켓 충돌
fprintf(stderr, "out_tcp %d\n", out_tcp);
if(send(out_tcp, &packet, sizeof(packet), 0) == -1)
fprintf(stderr, "send TCP error");
fprintf(stderr, "after send");
소켓은 이미 준비 연결 및 제 2 피어가 내려 가기 전에 여러 번 실행 된 있습니다. 이 코드가 -1 값을 반환 할 것으로 예상했지만, 출력에서만 "out_tcp 11"을 생성 한 다음 응용 프로그램을 종료합니다. 오류 메시지가 없으며 보내지는 반환 값이 없습니다. 내가 Valgrind에서 실행하면 응용 프로그램이 정상적으로 종료된다고 표시됩니다. 오류/경고 메시지는 표시되지 않습니다.
누구든지 디버깅 방법을 알고 있습니까? 사용할 도구? 나는 정보가 없으므로 이것에 상당히 매달렸다. 사전 Harnen
시그널링을 사용하는 데 도움이 희망? 'gdb'로 검사 해 봤나? –
Valgrind? 그것은 메모리 누수가 아니므로'gdb'에서 실행하십시오. 'SIG_PIPE' 때문에 종료 할 수 있습니다. –
[SIGPIPE를 방지하거나 서버가 종료되지 않도록하는 방법] 복제본을 만들 수 있습니까? (http://stackoverflow.com/questions/6821469/how-to-prevent-sigpipe-or-prevent-the-server-from-ending) –