在使用send或write函数对非阻塞的tcp socket进行数据发送时,如果一次性发送的数据包长度不大,那么就不会有问题,但是如果想要一次发送几万个字节的数据的话,那么就要注意了,函数的返回值很可能会小于要求发送的长度,必须要循环调用几次才能把数据发送完。
int written_bytes=0;
int bytes_left=len;
int index=0;
while(bytes_left>0)
{
written_bytes = write(fd, data+index, bytes_left);
if (written_bytes <= 0)
{
if(errno==EINTR|| errno==EAGAIN)
{
written_bytes=0;
}
else
{
break;
}
usleep(1000);
}
else
{
bytes_left-=written_bytes;
index+=written_bytes;
}
}