私のプログラムでは、他の接続を待機するリッスン ソケットにスレッド ブロッキングがあり、コードは次のようになります。
{
......
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() が戻らないのはなぜですか?