关闭非阻塞套接字

时间:2009-12-29 09:49:30

标签: 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函数,我不会看到这个问题。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您忽略了fcntl的任何错误结果。如果fcntl返回-1,则至少应打印出错误消息(例如,使用perror)。