Accept()方法和TCP/IP握手
-
21-09-2019 - |
题
我将Java serversocket类用于服务器应用程序。接受()方法是否参与TCP/IP握手?
正如我在TCP/IP转储中看到的,从命令NetStat中,调用接受方法并返回套接字对象。
是Java问题,还是我不明白Accept()语义?
解决方案
通常,在UNIX中,如果您使用Listen()标记套接字,则操作系统开始接受连接。当您调用Accept()函数时,操作系统只需移交已经打开的连接即可。侦听采用一个参数,该参数允许您指定操作系统允许的打开连接数量(即队列的大小)。
其他提示
这 accept
方法本身并不积极参与握手。消息的发送和接收在TCP/IP协议堆栈中实现,通常在OS内核空间中。
但是,那 accept()
方法是从某种意义上说明TCP/IP堆栈仅在某些过程有一个过程中发送SYN-ACK消息的意义 accept()
致电Active,以绑定与相关的IP地址和端口绑定的插座。当三向握手完成后, accept()
方法调用将完成。
如果没有进程调用 accept()
随着时间的流逝,内核将删除传入SYN消息,并且远程客户端最终将超时连接尝试。 (另一方面,如果IP地址 /端口没有限制,则内核可能会以第一个响应,并且远程客户端将看到“连接拒绝”。)
仅在连接客户端和服务器(握手等)之后接受返回。
不隶属于 StackOverflow