c - SIGPIPE(OSX)和断开连接的套接字?

标签 c xcode macos sockets sigpipe

我正在开发一个通过 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/

相关文章:

macos - 如何在 Mac 上的 TextWrangler 中默认打开行号?

c++ - 为什么 Windows API 提供 2 种获取 "return"值的方法?

iOS - UIView 描述框架与调试器递归描述框架不匹配

ios - 使用 libusbmuxd 在 Mac 和 iPhone 之间读/写

ios - didRangeBeacons 没有在 ios 中获取 uuid

objective-c - 如何在已安装的 Cocoa 应用程序上运行 Gcov?

javascript - 有没有办法通过浏览器Javascript检测Mac上触控板、魔术鼠标或魔术触控板的多点触控事件?

c - 有没有办法快速找到Windows操作系统中隐藏的进程?

Curses 库退格问题

c - 尝试创建动态数组,给出意想不到的结果