man私はページを読みましたが、write()失敗してerrnotoEAGAINまたはを設定すると、もう一度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()し、上記と同様に処理しています。Linuxとコンパイラを使用しています。write()read()gcc