1

我一直在使用 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.                     

我知道如果它是非阻塞的,这可能会发生,但我使用的是无限超时的阻塞发送。

4

2 回答 2

2

如果您设置了发送超时,这可能是超时。如果不是,您可以认为这是对连接致命的错误。您可以调用getlasterror来找出问题所在。

于 2014-02-22T09:01:45.503 回答
-1

UDP 数据报被完整发送或根本不发送。你描述的情况是不可能的。请提供你的证据。

于 2014-02-22T10:22:22.267 回答