在网络编程中,服务器程序的代码结构一般如下:

socket() -> bind() -> listen() -> accept()

当有一个新的客户端连接时,accept建立一个新的socket,然后将sockfd返回,接下来数据的发送和接收就都在这个sockfd中进行

但是一直有一个问题我比较困惑:在服务器端,当有数据到达时,协议栈是如何将数据传递到正确的sockfd的呢(服务器端存在多个已连接的客户端)?因为不同的网络连接是使用同一个监听端口,如80端口,不可能为每一个建立的连接分配一个端口(事实也不是这样);

上网搜寻一下,一个比较合理的解释:使用网络连接的源ip+源port来区分不同的数据连接,本身TCP协议中提供,而且可以唯一标识网络连接,因为不可能同一个客户端使用同一个端口进行来连接server的。

来自yaronspace.cn  本文链接:http://yaronspace.cn/blog/archives/1290