I have question. I create socket , connect , send bytes , all is ok.
and for receiving data i use recv function.
char * TOReceive= new char[200];
recv(ConnectSocket, TOReceive , 200, 0);
when there are some data it reads and retuns, succefull , and when no data waits for data, all i need to limit waiting time , for example if 10 seconds no data it should return.
Many Thanks.
Windows sockets has the select
function. You pass it the socket handle and a socket to check for readability, and a timeout, and it returns telling whether the socket became readable or whether the timeout was reached.
See: http://msdn.microsoft.com/en-us/library/ms740141(VS.85).aspx
Here's how to do it:
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);
}
If it returns true, your next call to recv
should return immediately with some data.
You could make this more robust by checking select
for error return values and throwing exceptions in those cases. Here I just return true
if it says one handle is ready to read, but that means I return false
under all other circumstances, including the socket being already closed.
您必须在调用recv
之前调用select
函数以了解是否有要读取的内容。
您可以使用SO_RCVTIMEO套接字选项指定recv()调用的超时值。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.