我一直在使用 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.
我知道如果它是非阻塞的,这可能会发生,但我使用的是无限超时的阻塞发送。