我将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地址 /端口没有限制,则内核可能会以第一个响应,并且远程客户端将看到“连接拒绝”。)

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top