簡體   English   中英

C ++套接字窗口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM