2014-10-06 35 views
0

我有以下代码,并且在发送了几百个字节后写入套接字写入套接字。我已经使用“rb”标志读取fread字节。TCP套接字在循环中途停止写入

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

套接字是否非阻塞? – usr 2014-10-06 17:12:32

+0

阅读写文档。看看错误代码。现在修复您的代码以详细查看这些错误代码,或者至少打印出您的代码正在获取的错误。 – 2014-10-06 17:12:49

+0

errno给我的是0,所以我不能做太多。我如何知道套接字是否是非阻塞的,我无法访问服务器代码。 – Elsendion 2014-10-06 17:16:59

回答

0

当您收到SIGPIPE信号或来自write()返回的EPIPE错误时,表示套接字的读取结束已经停止侦听。

您唯一的回应是关闭套接字。你不能让另一方接收更多的字节并且连接已经死亡。