【发布时间】: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 以查看错误代码。
-
你在什么操作系统上做这个?你是否包括
?