为什么当我使用 "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" 退出进程后不应该关闭发送端的套接字吗?谢谢!
没有给出代码,但这是对可能发生的事情的有根据的猜测:
- 您有两段独立的代码运行:发送和接收
- 当您使用CTL+C杀死发送套接字时,您正在传输数据。
- 您希望接收套接字停止,但它并没有停止。
问题可能是 "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,由你来检测它应该关闭的条件,然后关闭它。
我是套接字编程的新手,我知道使用"control-c"关闭套接字是一个坏习惯,但为什么在我使用"control-c"后接收端的套接字一直无限接收''关闭发送过程?在 "control-c" 退出进程后不应该关闭发送端的套接字吗?谢谢!
没有给出代码,但这是对可能发生的事情的有根据的猜测:
- 您有两段独立的代码运行:发送和接收
- 当您使用CTL+C杀死发送套接字时,您正在传输数据。
- 您希望接收套接字停止,但它并没有停止。
问题可能是 "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,由你来检测它应该关闭的条件,然后关闭它。