【发布时间】:2022-01-27 05:41:04
【问题描述】:
我一直在挑战自己编写一种方法,以便在套接字断开后连接()返回(用于实验测试)。
如果我认为在 close() 调用后将在套接字上分配一个负文件描述符,我知道我无法关闭套接字
另外我不能 connect() 回来(以正式和常见的方式),因为在 RST 或最后一个 FIN ACK 之后,套接字将加入 Closed State + time_wait TIME_WAIT 不是问题,但关闭状态是问题。
分配一个新的文件描述符(通过 C++ 甚至 Java Injection 或 Kernel Modify 进行低级访问)不是一种方法,因为我的意思是重用相同的文件描述符。
谁能告诉我是否可以这样做?有没有可能? 或者是否可以通过使用原始套接字不加入任何“不可连接状态”?
【问题讨论】:
-
能否提供断开已连接套接字的代码,然后尝试重新连接?
-
它是 C++ 中的通用代码,我刚刚调试并让套接字处于称为“关闭”的给定状态,我已经搜索过它并且它自动发生并由内核完成,所以基本上你可以通过使用普通套接字来重现它
-
不,无法重新连接套接字。您必须创建一个新套接字并建立一个新连接。
-
即使你能做些什么来恢复连接,那又如何呢?在套接字的另一端有一个编程监听,它已经看到你的套接字端被关闭并且它已经关闭了它的连接端,所以在另一端没有任何东西可以让你再进行通信。
-
@MartinYork 我认为 OP 认为
shutdown()API 旨在允许再次使用套接字。对于新的连接。
标签: c++ c sockets networking raw-sockets