Pourquoi arrêter un socket ne peut pas laisser le select () retourner?

Dans mon programme, il y a un thread bloquant un socket d’écoute, qui attend d’autres connexions, et le code aime ceci:

{ ...... 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 { ...... } 

Selon mes compréhensions, si dans un autre thread, fermez le socket, et le code aime ceci:

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

Je pense que le select () dans le fil précédent devrait retourner. Mais après les tests, je trouve que le select () est toujours en blocage.

Pourquoi arrêter un socket ne peut pas laisser le select () retourner?