[英]C++ socket windows
我有问题。 我创建套接字,连接,发送字节,一切都好。
并且为了接收数据我使用recv函数。
char * TOReceive= new char[200];
recv(ConnectSocket, TOReceive , 200, 0);
当有一些数据读取和返回时,成功,当没有数据等待数据时,我需要限制等待时间 ,例如,如果10秒没有数据应该返回。
非常感谢。
Windows套接字具有select
功能。 您将套接字句柄和套接字传递给它以检查是否具有可读性和超时,并返回告知套接字是否可读或是否已达到超时。
请参阅: http : //msdn.microsoft.com/en-us/library/ms740141(VS.85).aspx
这是怎么做的:
bool readyToReceive(int sock, int interval = 1)
{
fd_set fds;
FD_ZERO(&fds);
FD_SET(sock, &fds);
timeval tv;
tv.tv_sec = interval;
tv.tv_usec = 0;
return (select(sock + 1, &fds, 0, 0, &tv) == 1);
}
如果它返回true,则下一次调用recv
应立即返回一些数据。
通过在这些情况下检查select
错误返回值和抛出异常,可以使其更加健壮。 在这里我只返回true
如果它说一个句柄准备好读,但这意味着我在所有其他情况下返回false
,包括套接字已经关闭。
您必须在调用recv
之前调用select
函数以了解是否有要读取的内容。
您可以使用SO_RCVTIMEO套接字选项指定recv()调用的超时值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.