0

我写了一个 tcp 服务器程序(linux c)并在主机 B 上运行它

如果主机 A 与主机 B 建立 TCP 连接

然后在不发送 FIN/ACK 的情况下关闭

如何在 tcp 服务器中编写源代码来终止这个 tcp 连接?

使用原始套接字来制作假 RST?

或其他方式?

谢谢!

4

2 回答 2

1

close()一旦确定连接不再可用,就只是服务器端的套接字。最终,套接字将在内部超时并开始向读/写操作报告错误,此时您可以将其关闭。如果您不想等待那么久,那么在您自己的代码中实现超时,或者作为协议中的 keepalive/ping 命令,或者作为一个简单的计时器来跟踪客户端与服务器最后一次交换任何数据的时间. 如果超时期限到期,请关闭套接字,而不管其实际状态如何。

于 2013-04-25T15:15:52.030 回答
0

在这种情况下我不确定,但是如果您创建一个包含所有打开连接的二进制文件:

FILE *ptr_myfile;
ptr_myfile=fopen("test.bin","wb"); //opened sockets
//.. your code ..
sockfd[k] = socket(AF_INET, SOCK_STREAM, 0);
fwrite(&sockfd[k], sizeof(sockfd[k]), 1, ptr_myfile_soc);
//.. your code ..
close(ptr_myfile);

如果主机 A 在未发送 FIN/ACK 的情况下关闭,则在另一个可执行文件中,您将从该文件中读取并关闭相关套接字:

fread(&sockfd[k],sizeof(sockfd[k]),1,ptr_myfile_soc);
printf("closing %d \n",k );
close(sockfd[k]);
于 2017-10-26T23:16:51.937 回答