【发布时间】:2016-05-05 15:37:05
【问题描述】:
有服务器,有客户端。客户端连接到服务器。服务器函数“接受”返回套接字连接的客户端。但是当客户端套接字变得无效时,它可以被重用。如何防止服务器重用同一个socket? P.S.:对于不赞成投票的粉丝,请注意,我不是在问套接字服务器,而是在问客户端套接字。
【问题讨论】:
-
你为什么要这样做?如果您指定了您要解决的实际问题,则可能有其他方法可以解决它。
-
“我不是在询问套接字服务器,我是在询问客户端套接字。” 非常含糊 - 我假设您的意思是您不是在询问监听套接字。 “如何防止服务器重用同一个套接字?” - 你不能(在我见过的任何实现中),也不应该尝试。至少对于 IP4(我不知道 IP6),端口号是 16 位值,如果例如,你会很快用完。 Web 服务器每次都坚持使用不同的端口号。
-
@MaxZS:每个连接的套接字都以两个 IP:port 端点为特征,并由拥有进程使用文件描述符进行管理。我不知道如何与您的最后评论相协调。一旦一个客户端与服务器的端口 X 断开连接,稍后的 accept() 可能会重新使用相同的服务器端端口号 X:您无法避免这种情况。这是你的问题吗?如果不是,您能否更清楚地重申您的问题?
-
我同意 TonyD 的观点。正如已经指出的那样,您的术语有些混乱,完全不清楚您在问什么。 “客户端套接字如何变得无效”(您的意思是关闭)?您对“重用套接字”的理解是什么。在 Linux 中,套接字由文件描述符表示。您是说您不希望下一个接受的套接字重用相同的文件描述符值吗?
-
@MaxZS 您需要清楚地说明您遇到的问题。为什么重用服务器上的套接字不好?