gpt4 book ai didi

c++ - 如何在 winsock 中使 'send' 非阻塞

转载 作者:可可西里 更新时间:2023-11-01 13:28:47 24 4
gpt4 key购买 nike

我正在制作一个以固定时间间隔向服务器发送 UDP 数据包的程序,如下所示:

while (!stop) {
Sleep(fixedInterval);

send(sock, pkt, payloadSize, flags);
}

但是周期性无法保证,因为 send 是一个阻塞调用(例如,当 fixedInterval 为 20 毫秒,而对 send 的调用是> 20 毫秒)。您知道如何将 send 变成非阻塞操作吗?

最佳答案

您需要使用非阻塞套接字。发送/接收函数与阻塞或非阻塞操作的函数相同,但您必须将套接字本身设置为非阻塞。

u_long mode = 1;  // 1 to enable non-blocking socket
ioctlsocket(sock, FIONBIO, &mode);

此外,请注意使用非阻塞套接字是完全不同的。您需要确保成功处理 WSAEWOULDBLOCK 错误! :)

因此,使用非阻塞套接字可能会有所帮助,但仍不能保证准确的时间段。你最好从计时器而不是这个简单的循环中驱动它,这样调用发送的任何延迟,即使在非阻塞模式下,也不会影响计时。

关于c++ - 如何在 winsock 中使 'send' 非阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17227092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com