Java ServerSocket.accept()方法的内部实现?
每个人都知道java中的套接字编程。我们编写了如下代码:Java ServerSocket.accept()方法的内部实现?,java,c#,operating-system,serversocket,Java,C#,Operating System,Serversocket,每个人都知道java中的套接字编程。我们编写了如下代码: ServerSocket serverSocket = new ServerSocket(1234); Socket server = serverSocket.accept(); 我们知道我们创建了serverSocket的对象,接下来我们编写serverSocket.accept()接收客户端请求的代码。我们知道,serverSocket.accept()等待新请求到来 但我的问题是:什么serverSocket.accept(
ServerSocket serverSocket = new ServerSocket(1234);
Socket server = serverSocket.accept();
我们知道我们创建了serverSocket的对象,接下来我们编写serverSocket.accept()代码>接收客户端请求的代码。我们知道,serverSocket.accept()代码>等待新请求到来
但我的问题是:什么serverSocket.accept()代码>方法是否在内部执行?可能是在while循环中运行?服务器如何识别任何新请求来服务?serverSocket.accept()的内部实现是什么代码>方法?有人知道吗?你可以自己找到
public Socket accept() throws IOException {
if (isClosed())
throw new SocketException("Socket is closed");
if (!isBound())
throw new SocketException("Socket is not bound yet");
Socket s = new Socket((SocketImpl) null);
implAccept(s);
return s;
}
如何工作?在Linux上,ServerSocket.accept()
最终(在本机代码中)执行一个accept
syscall(请参见man 2 accept
),阻止等待合适的传入连接
Java代码或本机代码中没有while
循环。我不知道Linux内核内部发生了什么,但在这一点上,这不再是一个Java问题
同样,在Windows上,Java和其他任何编程语言都可能适用于java。你可以进入该方法并查看。你也可以用调试器一行一行地调试。为什么这也被标记为c#?我猜“内部”功能取决于操作系统,如果不是系统架构的话。因为我使用C#和Java。两者在与功能相关的主要情况下是相同的。我的问题是内部如何工作?我在寻找深入的答案