gpt4 book ai didi

检查非阻塞发送是否成功

转载 作者:太空狗 更新时间:2023-10-29 15:01:00 25 4
gpt4 key购买 nike

我在一个套接字上进行一个非阻塞发送调用,然后在另一个套接字上进行阻塞接收。之后我想检查非阻塞发送是成功还是失败。如何做到这一点?

    while (i)
{
retval = send (out_sd, s_message, strlen (s_message), MSG_DONTWAIT);
retval = recv (client_sd, r_message, MSG_LEN, 0);
r_message[retval] = '\0';
/* Here I want to wait for the non-blocking send to complete */
strcpy (s_message, r_message);
strcpy (r_message, "");
i--;
}

最佳答案

您以某种方式混合了同步和异步 IO,这通常有点令人困惑,但我在这里看不到任何实际问题。

为避免硬轮询(如果您的操作已在循环中完成,它会一直查看)您应该使用 select() 来等待您的 channel /套接字可用于更多写入操作。这会告诉你前一个已经完成(或者它完全由你的操作系统接管,这是一样的)。

select() 函数是 C 中异步 IO 的基础,您应该在 here 中了解它。 , 和 this是一个我认为可能对您有用的示例。

请注意,虽然 select() 支持读取、写入和异常事件,但示例显示的是读取选择,您想进行写入选择。

关于检查非阻塞发送是否成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13841906/

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