我读了man
页,我的理解是,如果write()
失败并设置errno
to EAGAIN
or EINTR
,我可以执行write()
再次,所以我想出了以下代码:
ret = 0;
while(ret != count) {
write_count = write(connFD, (char *)buf + ret, count);
while (write_count < 0) {
switch(errno) {
case EINTR:
case EAGAIN:
write_count = write(connFD, (char *)buf + ret, count -ret);
break;
default:
printf("\n The value of ret is : %d\n", ret);
printf("\n The error number is : %d\n", errno);
ASSERT(0);
}
}
ret += write_count;
}
我正在表演read()
and write()
在套接字上并处理read()
与上面类似。我正在使用 Linux,gcc
编译器。
你有一个“不要重复自己”的问题 - 不需要两次单独的调用write
,也不适用于两个嵌套循环。
我的正常循环看起来像这样:
for (int n = 0; n < count; ) {
int ret = write(fd, (char *)buf + n, count - n);
if (ret < 0) {
if (errno == EINTR || errno == EAGAIN) continue; // try again
perror("write");
break;
} else {
n += ret;
}
}
// if (n < count) here some error occurred
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)