在 Windows XP 上,当我在非阻塞套接字上迭代调用WSASend时,它会失败并显示 WSAENOBUFS。
我这里有两个案例:
情况1:
在非阻塞套接字上,我调用WSASend。这是伪代码:
while(1)
{
    result = WSASend(...); // Buffersize 1024 bytes
    if (result == -1)
    {
        if (WSAGetLastError() == WSAENOBUFS)
        {
            // Wait for some time before calling WSASend again
            Sleep(1000);
        }
    }
}
在这种情况下,WSASend 成功返回约 88000 次。然后,它会因 WSAENOBUFS 失败,并且即使在一段时间后尝试也不会恢复,如代码所示。
案例2:
为了解决这个问题,我引用了这个并按照那里的建议,就在上面的代码之前,我用 SO_SNDBUF 调用了setsockopt并设置了 buffersize 0(零)
在这种情况下,WSASend 成功返回约 2600 次。然后就失败了。但等了2600次又成功了又失败。
现在我在这两种情况下都有这些问题:
情况1:
案例2:
编辑:
对于异步套接字(在 …