为什么当我使用 "control-c" 关闭发送方的套接字时,接收方的套接字会无限接收“”

why socket on the receiving peer keep receiving '' infinitely when I use "control-c" to close the socket on the sending peer

我是套接字编程的新手,我知道使用"control-c"关闭套接字是一个坏习惯,但为什么在我使用"control-c"后接收端的套接字一直无限接收''关闭发送过程?在 "control-c" 退出进程后不应该关闭发送端的套接字吗?谢谢!

没有给出代码,但这是对可能发生的事情的有根据的猜测:

  1. 您有两段独立的代码运行:发送和接收
  2. 当您使用CTL+C杀死发送套接字时,您正在传输数据。
  3. 您希望接收套接字停止,但它并没有停止。

问题可能是 "end of transmission" 协议之一。如果发送代码在您按下 CTL+C 时触发文件结束 (EOF)(或中止或终止),则接收套接字 应该 看到它并停止接收。但是,您还没有说明在您按下 CTL+C 时发送代码在做什么。

接收套接字可能正在等待更多数据;至于收款码,转账的时候会提示,耐心等待更多信息。

周围有比我更好的套接字程序员,但我认为可以肯定地说,一旦你达到那个水平,你应该注意传输协议的细节。如果 CTL+C 只是终止服务器(发送)代码,那么客户端不知道是否存在真正的终止,传输中的意外延迟,或者服务器进程只是脑放了一个屁,一旦事情发生就会重新开始发送清理。

如果您有任何方法可以监控来回的实际值,请查看在 "normal" 数据传输终止和 CTL+C 终止期间发生的情况。这可能会帮助您将不良行为归零。

I know it's a bad habit to close socket using "control-c"

这将关闭整个进程,而不仅仅是一个套接字。

why socket on the receiving peer keeps receiving '' infinitely after I use "control-c" to close the sending process?

猜测,如果没有看到您应该在问题中发布的代码,这是可能的,您在调用 recv().

时忽略了错误和流结束

shouldn't the socket on the sending peer be closed after "control-c" to exit the process?

是的。整个过程是'closed',包括它的所有资源。

至于receiving socket,由你来检测它应该关闭的条件,然后关闭它。