accept()函数如何工作?

Log*_*est 5 c sockets server

我对accept()C中的功能有疑问.

当服务器接收连接时,该accept()函数创建一个新的套接字与客户端通信,然后让"旧套接字"侦听新连接.

然后,我明白服务器可以通过"新套接字"与客户端通信,但客户端如何与"新套接字"通信(因为客户端不知道这个"新套接字")?

dbu*_*ush 8

在服务器端,侦听套接字仅与本地IP和端口关联,并处于LISTEN状态.

相反,服务器上接受的套接字(以及客户端上的连接套接字)由本地IP和端口以及远程IP和端口标识,并处于ESTABLISHED状态.

在客户端,服务器使用与连接套接字分开的侦听套接字并不重要.到客户端返回时connect,服务器已经返回,accept并且从每个服务器返回的套接字描述符可以相互通信.

  • @Milack这是对的.监听套接字可以多次调用"accept"来接受多个连接.所有这些接受的套接字都将具有相同的本地IP和端口,但远程IP和/或端口将有所不同. (2认同)
  • @Masiwan客户端的连接套接字与远程IP和端口(即它连接的端口)以及本地IP和端口相关联.因此,当客户端执行`send`时,它会发送到关联的远程IP:端口.在接受的套接字的服务器端也是如此. (2认同)