English 中文(简体)
TCP 晚期不会造成坠毁过程的返回
原标题:TCP Send does not return cause crashing process
  • 时间:2009-08-25 19:22:25
  •  标签:

如果一台笔记机和客户连接起来,我想确定客户何时不再连接。 我认为,我只能这样做,试图向客户发出信息,一旦寄出1分的1分回来,我就能够冲破一片。 这一安装工作在Windows上,但一分钟,我试图与BSD的袖珍一道,在服务器一侧发送()电话,使我的服务器在客户不再连接的情况下坠毁。 它甚至没有归还1-1......公正终止该方案。

请解释为什么发生这种情况。 提前感谢!

最佳回答

这是由临时自治机构发出信号造成的。 见send(2):

The send() function shall fail if:
[EPIPE] The socket is shut down for writing, or the socket is connection-mode and is no longer connected. In the latter case, and if the socket is of type SOCK_STREAM or SOCK_SEQPACKET and the MSG_NOSIGNAL flag is not set, the SIGPIPE signal is generated to the calling thread.

可以通过使用<代码>来避免这种情况。 缩略语 然后,<代码>send(功能>将返回-1,并在这一情形下设置<代码>errno至EPIPE

问题回答

You need to ignore the SIGPIPE signal. If a write error happens on a socket, your process with get SIGPIPE, and the default behavior of that signal is to kill your process. Writing networking code on *nix you usually want:

signal(SIGPIPE,SIG_IGN);




相关问题
热门标签