Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ServerSocket.accept()方法的内部实现?_Java_C#_Operating System_Serversocket - Fatal编程技术网

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

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(

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

 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。两者在与功能相关的主要情况下是相同的。我的问题是内部如何工作?我在寻找深入的答案