我一直在使用UDT库(一种基于udp的协议)来发送文件,我注意到发送函数在以阻塞模式返回之前将数据发送到缓冲区。但是,send 函数似乎返回而不以阻塞模式发送整个数据(send() 返回发送的数据量)。此概率的可能原因是什么,如果无法解决该问题,应如何发送剩余数据?我为 tcp 和 udp 使用了 winsock 库,但我没有得到这个 tcp 或 udp 发送的概率(功能类似于 udt)。通过传输相同的文件和网络来测试所有程序。
int a;
if (UDT::ERROR == (a = UDT::send(*(UDTSOCKET*)sock, buffer, size, 0)))
{
cout << "send: " << UDT::getlasterror().getErrorMessage() << endl;
return -1;
}
else
{
return a;
}
This is the code i use. the value of 'a' is not the same as 'size' at times.
我知道如果它不阻塞,就会发生这种情况,但我正在使用无限超时的阻塞发送。
如果设置了发送超时,则可能是超时。如果没有,您可以认为这是对连接致命的错误。您可以调用getlasterror来找出出了什么问题。
UDP数据报被完整发送或根本不发送。你描述的情况是不可能的。请提供您的证据。