Java accept()方法和tcp/ip握手

Java accept()方法和tcp/ip握手,java,sockets,tcp,handshaking,Java,Sockets,Tcp,Handshaking,我使用JavaServerSocket类作为服务器应用程序。 accept()方法是否参与tcp/ip握手 正如我在tcp/ip转储和命令netstat中看到的,在调用accept方法并返回Socket对象之前,客户端与建立连接 是java问题,还是我不理解accept()语义?通常在Unix中,如果用listen()标记套接字,操作系统将开始接受连接。当您调用accept()函数时,操作系统只需将已打开的连接移交给您。Listen接受一个参数,该参数允许您指定操作系统允许的“未接受”开放连接数

我使用JavaServerSocket类作为服务器应用程序。 accept()方法是否参与tcp/ip握手

正如我在tcp/ip转储和命令netstat中看到的,在调用accept方法并返回Socket对象之前,客户端与建立连接


是java问题,还是我不理解accept()语义?

通常在Unix中,如果用listen()标记套接字,操作系统将开始接受连接。当您调用accept()函数时,操作系统只需将已打开的连接移交给您。Listen接受一个参数,该参数允许您指定操作系统允许的“未接受”开放连接数(即队列大小)。

Accept仅在客户端和服务器连接(握手等)后返回。

Accept方法本身并不积极参与握手。消息的发送和接收在TCP/IP协议栈中实现,通常在操作系统内核空间中实现

但是,
accept()
方法的含义是,如果某个进程对绑定了相关IP地址和端口的套接字进行了
accept()
调用,则TCP/IP堆栈只会发送SYN-ACK消息。三方握手完成后,
accept()
方法调用将完成

如果没有进程及时调用
accept()
,内核将丢弃传入的SYN消息,远程客户端最终将暂停连接尝试。(另一方面,如果IP地址/端口未绑定,那么内核可能会响应RST,远程客户端将看到“连接被拒绝”。)