70,022
社区成员




int loopWriteV(int _isockfd, struct iovec *_iov, int _iovcnt)
{
int iret = 0;
int i = 0;
int itmplen0 = 0;
int itmplen1 = 0;
int itmplen2 = 0;
for(i = 0; i < _iovcnt; i++)
{
itmplen0 += _iov[i].iov_len;
}
int w;
i = 0;//归零
while(itmplen0 > 0)
{
itmplen1 = writev(_isockfd, _iov + i, _iovcnt - i);
if(itmplen1 == itmplen0)
{
break;
}
else if(itmplen1 <= 0)
{
if((errno == EINTR) ||(errno == EAGAIN))
{
continue;
}
else
{
perror("what the fucking what");
iret = -1;
goto leave;
}
}
else// if(itmplen1 < itmplen0)
{
itmplen0 -= itmplen1;
itmplen2 = 0;
for(; i < _iovcnt; i++)
{
itmplen2 += _iov[i].iov_len;
if(itmplen2 > itmplen1)
{
//此处指针偏移错误
//_iov[i].iov_base += (itmplen2 - itmplen1);
//_iov[i].iov_len -= (itmplen2 - itmplen1);
break;
}
else if(itmplen2 == itmplen1)
{
i++;
break;
}
}
}
}
leave:
return iret;
}
我找到原因了,还是要感谢各位的回答。
writev:成功返回write字节数,失败返回-1,用 error()获取错误码,