2

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

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

4

2 回答 2

1

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

于 2009-12-29T10:40:26.477 回答
0

您忽略来自fcntl. 如果fcntl返回 -1,您至少应该打印出一条错误消息(perror例如,使用 )。

于 2009-12-29T12:03:52.563 回答