如何检查非阻塞套接字客户端中的数据
How to check data in non-blocking sockets 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);
如果数据已经到达,那将起作用,否则它将 return -1/EAGAIN/EWOULDBLOCK.
or select() and then recv()
那行得通。但是,阻塞模式读取的超时值与您在 select 中使用的超时值相同,设置为读取超时。
你的问题没有道理。您必须阻塞直到数据到达,select()
或阻塞 recv()
.
客户做了:
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);
如果数据已经到达,那将起作用,否则它将 return -1/EAGAIN/EWOULDBLOCK.
or select() and then recv()
那行得通。但是,阻塞模式读取的超时值与您在 select 中使用的超时值相同,设置为读取超时。
你的问题没有道理。您必须阻塞直到数据到达,select()
或阻塞 recv()
.