如何使用VC++和WinSock編碼?在套接字上接收,直到在60秒的時間間隔內發送50個字節
Select ?
Recv(...,...,...,MSG_PEEK) ?
我只需要算法。
謝謝。
+ 解決
參見TCP以下代碼: -
/* * -2:超時 * -1:套接字錯誤 * 0:連接正常終止 * n:返回的字節數量 */
int timeout_recv (SOCKET sock, char *buf, int *length, int timeoutinseconds) {
static time_t prevTime = 0;
time_t currTime;
DWORD lng = 0,n;
_ASSERTE(sock != INVALID_SOCKET);
_ASSERTE(buf);
_ASSERTE(length);
_ASSERTE(*length);
time(&prevTime);
再次:
if (ioctlsocket(sock, FIONREAD, &lng) == -1 || (n=lng) == 0 || lng < *length) {
Sleep(350);
time(&currTime);
if((currTime - prevTime) > timeoutinseconds)
return -2;
else
goto again;
}
if (*length != lng)
{
_ASSERTE(0);
aprintf("we have just received a burst of data, expected %d got %d",*length,lng);
}
lng = recv(sock,buf,*length,0);
if(lng == -1) {
aprintf("socket error from recv %d",WSAGetLastError());
return -1;
}
if (lng == 0) {
aprintf("connection terminated gracefully\n");
return 0;
}
return lng;
}
如果間隔超過,我想結束一切,走出 – user1813004