我有以下代码,并且在发送几百个字节后,我的写入停止写入套接字。我使用" 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循环的中间,它会将我的程序退出到终端。
答案 0 :(得分:0)
当你收到一个SIGPIPE信号,或者从write()返回一个EPIPE错误时,这意味着套接字的读取端已停止收听你。
您唯一的回应是关闭套接字。你不能让对方接收更多的字节而连接已经死了。