我正在开发一个通过 TCP 连接到服务器的应用程序。
如果套接字由于某种原因被关闭,我最终会进入 SIGPIPE 处理程序。
我该怎么做才能使 recv 和 send 只在断开/关闭的套接字上返回错误?
谢谢
最佳答案
我发现在 OS X 上忽略 SIGPIPE 无效。请改用 SO_NOSIGPIPE。请注意,这是在套接字上设置一次,而不是在每次调用 send() 时请求的 MSG_NOSIGNAL。
int socket = accept (...); /* (or however you're getting the socket) */
int option_value = 1; /* Set NOSIGPIPE to ON */
if (setsockopt (socket, SOL_SOCKET, SO_NOSIGPIPE, &option_value, sizeof (option_value)) < 0) {
perror ("setsockopt(,,SO_NOSIGPIPE)");
}
关于c - SIGPIPE(OSX)和断开连接的套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19509348/