尽管 SOCK_NONBLOCK 已设置,但 accept4 块

accept4 blocks though SOCK_NONBLOCK is set

我正在尝试非阻塞地接受套接字:

accept4(s, (struct sockaddr *) &peerAddress, &len,SOCK_NONBLOCK);

其中 s 是一个 fd,peerAddres 是一个地址,len 是它的长度。 我希望 accept 不会阻塞线程。 虽然,一旦我调试,该过程就停留在这一行,而没有连接挂起。 我的错误是什么?

SOCK_NONBLOCK 只是将新接受的套接字设置为非阻塞。它不会使 accept 本身成为非阻塞的。为此,需要在调用 accept 之前将监听套接字设置为非阻塞。