c - 如何检查非阻塞套接字客户端中的数据

标签 c sockets tcp client

客户端执行:

connect()
select()
getsockopt()
write()

直到这一刻一切都很好。但是服务器需要几秒钟才能将状态发回,而我希望在没有任何等待阻塞的情况下接收它。那么我应该如何检查服务器的响应是否可用?应该是吗

  • 另一个connect(),然后是recv()
  • 或者只是recv(sockfd, buffer, LINE_LENGTH-1, MSG_DONTWAIT);
  • select(),然后recv()

我找不到清晰的示例或良好的解释来说明它的外观 客户端。

最佳答案

another connect() and then recv()

当然不是。这将创建另一个连接,并且您将重新开始。

or just recv(sockfd, buffer, LINE_LENGTH-1, MSG_DONTWAIT);

如果数据已经到达,则该方法有效,否则将返回 -1/EAGAIN/EWOULDBLOCK。

or select() and then recv()

那会起作用的。但是,阻塞模式读取的超时值与您在选择中使用的超时值相同,设置为读取超时。

你的问题根本没有意义。您必须在 select() 或阻塞 recv() 中阻塞,直到数据到达。

关于c - 如何检查非阻塞套接字客户端中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28282807/

相关文章:

c - 通过 TCP 套接字发送 C 结构体

javascript - 将 node.js 服务器端代码移植到 HTML5 WebSockets

linux - tcpdump voip终结者ip地址

linux - TCP ACK 响应延迟 10ms

java - 为什么守护进程最经常用C编写?

c++ - 自行卸载的 Linux 共享库

c - EOF 控制 D 第一次不工作

c - FTP使用Socket编程

c - setsockopt 返回 errno=2

C语言。 TCP 服务器-客户端,字符串传递错误