【发布时间】:2013-12-20 22:36:03
【问题描述】:
我正在编写一个通过套接字(从客户端到服务器)发送数据的应用程序。我观察到非常奇怪的行为:当我杀死服务器时,首先发送,然后杀死就像服务器存在一样。下一个返回 EPIPE。你能解释一下为什么吗?
这是来自客户端应用程序的 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)
问候 J
【问题讨论】:
-
套接字是什么协议? UDP? TCP?
-
对不起,忘了说:我正在使用 TCP 套接字
-
服务器应用程序本身是否打开了 TCP 连接?或者它是继承它还是从另一个进程获取它?任何其他进程都可以拥有该套接字的副本吗?服务器是否通过连接调用
fork而没有在孩子中关闭它? (对此可以有很多解释。这并不是特别不寻常。)