为什么关闭套接字不能让select()返回?

时间:2013-08-21 08:07:34

标签: c sockets solaris

在我的程序中,在侦听套接字上有一个线程阻塞,等待其他连接,代码喜欢这样:

{
    ......
    FD_ZERO(&fd_sets);
    FD_SET(sock_fd, &fd_sets);

    ret_val = select(sock_fd + 1, &fd_sets, NULL, NULL, NULL);

    if (ret_val > 0)
    {
         accept(sock_fd, NULL, NULL);
         ......
    }
    else
    {
        ......
    }

根据我的理解,如果在其他线程中,请关闭套接字,代码如下:

{
    ......
    shutdown(sock_fd, SHUT_RD);
    ......
}  

我认为前一个线程中的select()应该返回。但经过测试,我发现select()仍处于阻塞状态。

为什么关闭套接字不能让select()返回?

0 个答案:

没有答案