繁体   English   中英

ServerSocket.accept()方法的内部实现?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM