我是套接字编程的新手,我知道使用" control-c"来关闭套接字这是一个坏习惯,但为什么接收端的套接字继续接收' '在我使用" control-c"之后无限制地关闭发送过程?不应该在" control-c"之后关闭发送节点上的套接字。退出进程?谢谢!
答案 0 :(得分:2)
我知道使用“control-c”关闭套接字是一个坏习惯
这会关闭整个过程,而不仅仅是一个套接字。
为什么接收对等体上的套接字在我使用“control-c”关闭发送过程后仍然无限接收?
猜测,如果没有看到您应该在问题中发布的代码,这是可能的,那么在调用recv().
在“control-c”退出进程后,不应该关闭发送对等体上的套接字吗?
是的。整个过程都是“封闭的”,包括其所有资源。
关于接收套接字,您需要检测它应该关闭的条件,然后关闭它。
答案 1 :(得分:0)
没有给出代码,但这里有一个有根据的猜测:
问题可能是"传输结束"协议。如果发送代码在您点击CTL + C时触发文件结束(EOF)(或中止或终止),则接收套接字应该看到并退出接收。但是,您没有说明在您点击CTL + C时发送代码正在执行的操作。
接收套接字可能只是在等待更多数据;就接收代码而言,在传输完成时会被告知,并且耐心等待更多信息。
有比我更好的套接字程序员,但我认为可以肯定地说,一旦你达到这个水平,你应该注意传输协议的细节。如果CTL + C只是终止服务器(发送)代码,那么客户端不知道是否存在真正的终止,传输中的意外延迟,或者服务器进程只是有一个脑屁并且一旦发生事情就会再次开始发送清理。
如果您有任何监控实际值的方法,请查看正常情况下的情况"终止数据传输和CTL + C终止。这可能有助于您了解不良行为。