TCP套接字在循环的中途停止写入

时间:2014-10-06 17:06:23

标签: c sockets tcp

我有以下代码,并且在发送几百个字节后,我的写入停止写入套接字。我使用" 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循环的中间,它会将我的程序退出到终端。

1 个答案:

答案 0 :(得分:0)

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

您唯一的回应是关闭套接字。你不能让对方接收更多的字节而连接已经死了。