在我的程序中,一个监听套接字上有一个线程阻塞,它等待其他连接,代码如下:
{
......
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() 返回?