【发布时间】:2018-11-17 11:49:46
【问题描述】:
我的问题是基于以下理解
- 套接字由 ip:port 定义。服务器和客户端都有自己的套接字
- Socket 连接由五个 touples server_ip、server_port、client_ip、client_port、protocol 定义
- 套接字描述符是一个标识套接字的整数值
我尝试实现自己的服务器,其中 socket() 和 accept() 返回不同的套接字描述符值(总是这样吗?)。我的问题是为什么说如果在服务器中没有打开新端口并且 ip:port 对于 socket() 和 accept() 返回的套接字描述符都相同,accept() 会创建一个新套接字。如果新的socket是由accept()创建的,它与socket()创建的socket有什么不同?
【问题讨论】:
-
"Socket 连接由...定义" - 在大多数网络中,连接通常是 4 元组
{server_ip, server_port, client_ip, client_port},因为 TCP/ IP 通常是隐含的。或者,TCP/IP 连接可能是 4 元组。 -
@jww
protocol也包含在识别唯一连接中,因为多个协议可以同时在同一个 IP:port 上运行。例如,TCP 和 UDP,在某些情况下,甚至是 IPv4 和 IPv6。
标签: linux sockets network-programming client-server