我正在設計和測試基於TCP套接字(Internet域)的客戶端服務器程序。目前,我正在我的本地機器上測試它,但無法理解關於SIGPIPE的以下內容。TCP客戶端服務器SIGPIPE
*。 SIGPIPE顯得非常隨機。它可以是確定性的嗎?
第一次測試包括從客戶端發送單個小(25個字符)的發送操作和在服務器上的相應接收。相同的代碼,在同一臺機器上運行成功與否(SIGPIPE)完全不受我的控制。失敗率約爲45%(相當高)。那麼,我能否以任何方式調整機器以最大限度地減少這種情況。
**。第二輪測試是從客戶端向服務器發送40000條(25個字符)的消息(總數據爲1MB),然後服務器響應它實際收到的數據的總大小。客戶端以嚴格的循環方式發送數據,並且在服務器上有一個單一的接收呼叫。它僅適用於發送總數據的最大1200字節,而且還有非確定性SIGPIPE,現在大約70%(非常糟糕)。
有人可以在我的設計中提出一些改進(可能它會在服務器上)。要求客戶端應能夠在向服務器發送單個套接字連接之後發送中等到非常高的數據量(每個消息約25個字符)。 我有一種感覺,多次發送反對單一接收將始終是有損和非常低效。我們是否可以合併消息並只發送一個send()操作。這是唯一的方法嗎?
請注意,SO_NOSIGPIPE不可移植。看到這裏:http://stackoverflow.com/questions/108183/how-to-prevent-sigpipes-or-handle-them-properly – 2013-06-18 17:26:19