在建立连接之前,accept() 方法究竟是如何被阻塞的?

How exactly accept() method is blocked until a connection is made?

来自 java.net.ServerSocket#accept()

public Socket accept() throws IOException

Listens for a connection to be made to this socket and accepts it. The method blocks until a connection is made.

我不明白在建立连接之前该方法的执行究竟是如何停止的。我搜索了源代码,但没有看到任何 while(true) 循环或 wait/notify.

我用谷歌搜索了这个问题,但找不到它是如何工作的解释。

PlainSocketImpl 中,您有 native void socketAccept(SocketImpl s) throws IOException; 方法。所以它会阻塞在本地代码中,你不需要关心它是如何完成的。

我对此不完全确定,但我认为 accept() 通过某些本机库(可能是某些 C 或 C++ 库)执行 accept 系统调用。 accept 系统调用将阻塞等待合适的传入连接。在这一点上,它不是 Java 依赖的,它取决于每个 OS 如何实现它。