关闭非阻塞套接字

标签 c sockets nonblocking

我在 C 中有以下代码。

void setNonBlocking(SOCKET fd){
    int flags;
    if (-1 == (flags = fcntl(fd, F_GETFL, 0)))
        flags = 0;

    fcntl(fd, F_SETFL, flags | O_NONBLOCK);
}

int main(){

int sock;
connect(sock, .....);
setNonBlocking(sock);
....
close(sock);

//we will do something here but the application exits in/after the close operation

}

我在非阻塞模式下使用 setNonBlocking 函数的套接字。当我关闭套接字时,应用程序会立即退出而不会出现段错误或其他任何情况。如果我不使用 setNonBlocking 函数,我看不到这个问题。

如何在没有这个问题的情况下关闭非阻塞套接字?

最佳答案

也许您的应用程序正在获取 SIGPIPE。在使用套接字编程时,您通常应该处理或忽略 SIGPIPE 信号。

关于关闭非阻塞套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1973784/

相关文章:

c - freeaddrinfo 上发生了什么事?

node.js - Socket.io已连接但无法通信

c - 如何在 C 中使用 Write() 写出字符?

javascript - 嵌套请求被阻塞

c++ - 非阻塞堆栈弹出

c++ - zmq-cpp : recv() waits for data despite ZMQ_DONTWAIT being set

c - 将字符串存储在 C 中的 char* 中

c - 权威 C 书籍指南和 list

c - 为什么 OpenMP lastprivate 会产生错误的结果?

检查有效数独的c程序