1

私のプログラムでは、他の接続を待機するリッスン ソケットにスレッド ブロッキングがあり、コードは次のようになります。

{
    ......
    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() が戻らないのはなぜですか?

4

0 に答える 0