簡體   English   中英

Linux TCP套接字崩潰

[英]Linux TCP socket crash

我編寫通過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");

Socket已准備好並已連接,並且在第二個對等體出現故障之前已執行多次。 我希望這段代碼返回-1值,但它只在輸出上產生“out_tcp 11”然后應用程序退出。 沒有錯誤消息,沒有發送的返回值。 我在Valgrind下運行它,它說應用程序正常退出 - 沒有錯誤/警告消息。

有誰知道如何調試它? 使用工具? 因為我沒有信息,所以我非常堅持這一點。

在此先感謝哈嫩

看起來您的應用程序忽略了SIGPIPE。 請參閱此主題以獲取更多信息:

如何防止SIGPIPE(或正確處理它們)

已解決:在發送功能中使用MSG_EORMSG_NOSIGNALflag ,如下所示

if(send(out_tcp, &packet, sizeof(packet), **MSG_EOR|MSG_NOSIGNAL**) == -1)

希望能幫助到你

您是否嘗試過有關錯誤情況的RTFM(閱讀精細手冊)? 你抓住或忽略任何信號嗎? 那么errno全局變量呢?

man send

TCP也是一種流協議,因此如果您不需要任何特殊標志,建議使用常見的流式訪問命令,如read(),write()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM