【问题标题】:why socket on the receiving peer keep receiving '' infinitely when I use "control-c" to close the socket on the sending peer为什么当我使用“control-c”关闭发送端上的套接字时,接收端上的套接字继续接收''
【发布时间】:2015-04-20 00:06:21
【问题描述】:

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

【问题讨论】:

  • stackoverflow.com/q/29727203/207421 的完全相同的副本。既然你已经这样做了并且得到了一个你说你理解的answer,你为什么还要问这个问题?
  • @EJP:当第一个被问到另一个问题时,你为什么将另一个问题标记为这个问题的重复?这个问题是重复的。
  • @RemyLebeau 我已经出于另一个原因投票决定关闭它。
  • 对不起,我的错,我没有完全理解,我只是通过TCP,我想现在我明白了,对不起@EJP

标签: c sockets tcp exit control-c


【解决方案1】:

我知道使用“control-c”关闭套接字是个坏习惯

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

为什么在我使用“control-c”关闭发送进程后,接收端的socket不断接收''?

猜测一下,如果没有看到您应该在问题中发布的代码,这是所有可能的事情,您在调用 recv(). 时忽略了错误和流结束

在“control-c”退出进程后,发送端的套接字不应该关闭吗?

是的。整个过程是“封闭的”,包括它的所有资源。

关于 receiving 套接字,由你来检测它应该关闭的条件,然后关闭它。

【讨论】:

    【解决方案2】:

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

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

    问题可能是“传输结束”协议之一。如果发送代码在您按下 CTL+C 时触发文件结束 (EOF)(或中止或终止),那么接收套接字应该看到并退出接收。但是,您还没有说明在您点击 CTL+C 时发送代码在做什么。

    接收套接字可能只是在等待更多数据;至于收款码,应该是转账完成的时候告知的,耐心等待更多信息。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 2016-07-28
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多