1. 程式人生 > >Linux系統網路程式設計中TCP通訊socket--send導致程序被關閉

Linux系統網路程式設計中TCP通訊socket--send導致程序被關閉

send(sockfd, buff, sizeof(buff), 0);
在linuxTCP通訊中上述send形式是常用的設定方式,但是如果在TCP連結斷開後呼叫該send函式,多次即會導致程序結束。

解決方法
最簡單的方式就是
send(sockfd, buff, sizeof(buff), MSG_NOSIGNAL);

下面說一下原因:

   linux下TCP/IP socket套接字建立後,實際上客戶端與伺服器端通訊是全雙工,即客戶端與伺服器端通訊各使用一個通道,而當一端關閉了通道,實際上另一邊的通道是不會關閉,仍可以向裡面寫資料,而此時,會產生一個訊號SIGPIPE,對訊號的預設處理方式是:關閉當前程序。

除上述方式以外還可以重新選擇對SIGPIPE訊號的處理方式,最常用的處理方式,是忽略:SIG_IGN