gpt4 book ai didi

c - 什么时候接收 block ?

转载 作者:太空狗 更新时间:2023-10-29 11:46:00 24 4
gpt4 key购买 nike

目标是在不阻塞的情况下从套接字读取数据。 Linux 手册页说:

The receive calls normally return any data available, up to the requested amount, rather than waiting for receipt of the full amount requested.

这是否意味着在使用 select() 轮询套接字描述符后,我不必将 MSG_DONTWAIT 标志传递给 recv()/poll()/epoll()?

最佳答案

recv/read 的行为取决于套接字本身的特性。如果套接字被标记为非阻塞,这些调用应立即返回 EAGAIN/EWOULDBLOCK 而不是阻塞进程。

套接字可以在读取之前标记为非阻塞,通常通过 fcntlioctl

手册的这段摘录说的是,基本上,不需要读取阻塞和非阻塞套接字来填充提供的整个缓冲区。这就是为什么检查 recv/read 调用的结果很重要,以便了解缓冲区中有多少包含实际数据以及有多少是垃圾。

将阻塞套接字与 IO 轮询调用结合使用根本不是一个好主意,例如 select/poll/epoll .即使轮询调用指示特定套接字已准备好读取,阻塞套接字有时仍会阻塞。

关于c - 什么时候接收 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15136308/

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