[英]Internal Implementation of ServerSocket.accept() method?
每个人都知道Java中的套接字编程。 我们编写如下代码:
ServerSocket serverSocket = new ServerSocket(1234);
Socket server = serverSocket.accept();
我们知道我们创建了serverSocket的对象,接下来我们编写serverSocket.accept();
代码以接收客户端请求。 我们知道serverSocket.accept();
等到新的请求到来。
但我的问题是:什么serverSocket.accept();
方法在内部吗? 可能正在while循环中运行? 服务器如何识别任何新请求开始服务? serverSocket.accept();
的内部实现是什么serverSocket.accept();
方法? 有人对此有想法吗?
在Linux上, ServerSocket.accept()
最终(以本机代码形式)执行accept
系统调用(请参阅man 2 accept
),该调用阻止等待适当的传入连接。
Java代码或本机代码中没有while
循环。 我不知道Linux内核内部会发生什么,但是到那时,这不再是Java问题。
Windows上的Java,C#或您考虑考虑的任何其他编程语言也可能适用同样的方法。
您可以自己找到它。
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;
}
accept()如何工作?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.