(套接字/网络)是否可以重新连接套接字或我自己的原始套接字



我一直在挑战自己,在套接字断开连接后编写一种连接((的方法(用于实验测试(。

如果我认为在close((调用后将在套接字上分配一个负文件描述符,我知道我无法关闭套接字

另外,我不能(以正式和常见的方式(连接((,因为在RST或最后一次FIN ACK之后,套接字将加入Closed State+time_waitTIME_WAIT不是问题,但问题是关闭状态。

分配一个新的文件描述符(通过C++进行低级别访问,甚至通过Java注入或内核修改(不是一种方法,因为我的观点是重复使用相同的文件描述符

有人能告诉我这是否可能吗?有可能吗 或者如果可以不加入任何";不可连接状态";通过使用原始套接字

操作系统似乎会将用于建立连接的普通套接字视为已连接,即使在它转换到关闭状态之后也是如此。

使用相同文件描述符的解决方法是创建一个新的套接字,然后使用dup2()允许新套接字采用原始文件描述符。然后关闭为新套接字创建的文件描述符。

int renew_socket (int s) {
int new_s = socket(PF_INET, SOCK_STREAM, 0);
if (new_s < 0 || s < 0) return new_s;
dup2(new_s, s);
close(new_s);
return s;
}

最新更新