我是套接字编程的新手,我知道使用“control-c”关闭套接字是一个坏习惯,但是为什么接收端的套接字在我使用“control-c”关闭发送过程后不断接收'' ? 在“control-c”退出进程后,发送端的套接字不应该关闭吗?谢谢!
2 回答
我知道使用“control-c”关闭套接字是一个坏习惯
这会关闭整个过程,而不仅仅是一个套接字。
为什么在我使用“control-c”关闭发送过程后,接收对等方的套接字继续无限接收''?
猜测一下,如果没有看到您应该在问题中发布的代码,这是可能的,您在调用时忽略了错误和流结束recv().
在“control-c”退出进程后,发送端的套接字不应该关闭吗?
这是。整个过程是“封闭的”,包括它的所有资源。
至于接收套接字,由你来检测它应该关闭的条件,然后关闭它。
没有给出代码,但这是对可能发生的事情的有根据的猜测:
- 您有两个单独的代码在运行:发送和接收
- 当您使用 CTL+C 终止发送套接字时,您正在传输数据。
- 您希望接收套接字停止,但事实并非如此。
该问题可能是“传输结束”协议之一。如果发送代码在您按下 CTL+C 时触发文件结束 (EOF)(或中止或终止),那么接收套接字应该看到并退出接收。但是,您还没有说明在您点击 CTL+C 时发送代码在做什么。
接收套接字可能只是在等待更多数据;至于收款码,是在转账完成时告知的,耐心等待更多信息。
周围有比我更好的套接字程序员,但我认为可以肯定地说,一旦你达到那个水平,你应该注意传输协议的细节。如果 CTL+C 只是终止服务器(发送)代码,那么客户端不知道是否有真正的终止,传输中的意外延迟,或者服务器进程只是大脑放屁,一旦有事情就会重新开始发送清理。
如果您有任何方法可以监控来回的实际值,请查看在“正常”数据传输终止和 CTL+C 终止期间发生的情况。这可能会帮助您将不良行为归零。