我正在編寫一個通過套接字發送數據的應用程序(從客戶端到服務器)。我觀察到非常奇怪的行爲:當我殺死服務器,首先發送後,殺死行爲像服務器存在。下一個返回EPIPE。你能解釋我爲什麼嗎?sendto()到不存在的套接字
這裏是從客戶端應用程序strace的:
(server not killed)
...
sendto(5, "\0\1\0\0\0\0\0\0000\311\0\0\211A\264R\0\0\0\0\232\377\4\0\0\0\0\0\0\0\0\0"..., 51516, MSG_NOSIGNAL, NULL, 0) = 51516
....
(server killed)
****sendto(5, "\0\1\0\0\1\0\0\0000\311\0\0\272A\264R\0\0\0\0c%\0\0\0\0\0\0\0\0\0\0"..., 51516, MSG_NOSIGNAL, NULL, 0) = 51516,****
(next send after server is killed)
sendto(5, "\0\1\0\0\2\0\0\0000\311\0\0\375A\264R\0\0\0\0d\307\n\0\0\0\0\0\0\0\0\0"..., 51516, MSG_NOSIGNAL, NULL, 0) = -1 EPIPE (Broken pipe)
問候 Ĵ
什麼協議是套接字? UDP? TCP? –
對不起,忘了提及:即時通訊使用TCP套接字 – JosiP
服務器應用程序本身是否打開TCP連接?還是繼承了它或從另一個過程中獲得了它?其他進程是否可以擁有該套接字的副本?服務器是否通過連接調用'fork'並且不關閉它在孩子中? (可以有很多解釋,這並不特別。) –