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

时间:2014-09-19 07:05:19

标签: java c# operating-system serversocket

每个人都知道java中的套接字编程。我们编写如下代码:

 ServerSocket serverSocket = new ServerSocket(1234);
 Socket server = serverSocket.accept();

我们知道我们创建了serverSocket的对象,然后我们编写serverSocket.accept();代码来接收客户端请求。我们知道serverSocket.accept();等到新请求到来。

但我的问题是:serverSocket.accept();方法在内部做了什么?可能是在while循环中运行?服务器如何识别任何新请求的服务? serverSocket.accept();方法的内部含义是什么?任何人都有这个想法吗?

2 个答案:

答案 0 :(得分:1)

在Linux上,ServerSocket.accept()最终(在本机代码中)执行accept系统调用(请参阅man 2 accept),它阻止等待合适的传入连接。

Java代码或本机代码中没有while循环。我不知道在Linux内核中发生了什么,但在那时,这不再是一个Java问题了。


这可能适用于Windows上的Java,以及C#或您关注的任何其他编程语言。

答案 1 :(得分:0)

您可以自己找到。

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()如何运作?