【问题标题】:TCP socket stops writing in the midway of a loopTCP 套接字在循环中途停止写入
【发布时间】:2014-10-07 01:27:17
【问题描述】:

我有以下代码,并且在发送数百个字节后,我的写入停止写入套接字。我已经使用“rb”标志读取带有 fread 的字节。

char filebuff[size_aux];
i=0;
int negative=0;
int positive=0;
int zero=0;
while( i<size_aux ) //size_aux is 79067
 {

  bytesSent = write(clnt_fd, &filebuff[i], 1 );
  if(bytesSent>0) positive++;
  if(bytesSent<0) negative++;
  if(bytesSent==0) zero++;

  i++;

}

它打印的是这样的:

Positive: 868
Negative: 78199
Zero: 0

我检查过它是否连续发送 868,然后停止发送,将 -1 作为写入轮次值。发送的字节数是随机的,有时像 868,有时像 600,但与文件的实际大小相比,值很小。 在此之前,我必须插入以下代码:

signal (SIGPIPE, SIG_IGN);

因为在 while 循环的中间,它会将我的程序退出到终端。

【问题讨论】:

  • 套接字是非阻塞的吗?
  • 阅读有关写入的文档。查看错误代码。现在修复您的代码以详细查看这些错误代码,或者至少打印出您的代码遇到的错误。
  • 给我的errno是0,所以我做不了太多。我如何知道套接字是否是非阻塞的,我无权访问服务器代码。
  • 尝试检查 sock_errno 以查看错误代码。
  • 你在什么操作系统上做这个?你是否包括

标签: c sockets tcp


【解决方案1】:

当你得到一个 SIGPIPE 信号,或者从 write() 返回一个 EPIPE 错误时,这意味着套接字的读取端已经停止监听你。

您唯一的反应是关闭套接字。你不能让对方接收更多的字节,连接就死了。

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 2015-10-30
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2015-08-04
    • 2018-02-03
    相关资源
    最近更新 更多