猿问

套接字API accept()函数如何工作?

套接字API是用于TCP / IP和UDP / IP通信的事实标准(即我们所知道的网络代码)。但是,它的核心功能之一accept()是不可思议的。


借用半正式定义:


accept()在服务器端使用。它接受从远程客户端创建新的TCP连接的传入尝试,并创建与此连接的套接字地址对关联的新套接字。


换句话说,accept返回一个新的套接字,服务器可以通过该套接字与新连接的客户端进行通信。旧的套接字(在其上accept被调用)保持打开状态,在同一端口上,侦听新的连接。


accept工作如何?如何实施?在这个话题上有很多困惑。许多人声称接受会打开一个新端口,而您通过该端口与客户端进行通信。但这显然是不正确的,因为没有打开任何新端口。实际上,您可以通过同一端口与不同的客户端进行通信,但是如何进行呢?当多个线程recv在同一个端口上调用时,数据如何知道去向?


我想这是客户端地址与套接字描述符相关联的东西,每当有数据通过时,recv它就被路由到正确的套接字,但是我不确定。


全面了解此机制的内部工作非常好。


www说
浏览 718回答 3
3回答
随时随地看视频慕课网APP
我要回答