2016-12-25 74 views
-1

我想在不指定緩衝區的情況下從套接字接收數據。所以我只想從傳入的數據緩衝區中移除x個字節。WinSock:從套接字中刪除數據

我有以下代碼(截斷):

recv(gSocket, NULL, userDataLength, 0); 

但是,當我執行的recv()返回值上面的代碼是SOCKET_ERRORWSAGetLastError()返回WSAECONNABORTED。此外,我的連接被關閉。

問題:使用receive函數從套接字的RX緩衝區中刪除數據是不可能的?

+0

它在哪裏說,緩衝區指針可以爲空? – EJP

+0

不通。但我認爲這是可能的,因爲它可能在其他套接字庫上。 –

+1

我不知道任何這樣的庫,但在任何情況下,這是一個* non sequitur。* – EJP

回答

2

我想在不指定緩衝區的情況下從套接字接收數據。

對不起,但那根本不可能。您必須提供一個緩衝區來接收字節。如果您不想使用這些字節,只需在讀入緩衝區後放棄該緩衝區即可。

我只是想從傳入的數據緩衝區中刪除x個字節。

這沒有API。您必須將字節讀入有效的緩衝區。你以後用這個緩衝區做什麼取決於你。

當我執行的 recv()返回值上面的代碼是 SOCKET_ERRORWSAGetLastError()返回 WSAECONNABORTED

我會預期WSAEFAULT來代替。

使用receive函數從套接字的RX緩衝區中刪除數據是不可能的?

當然,這是可能的。您只需讀取的字節到緩衝區中,哪怕它只是一個臨時緩衝區,如:

int ignoreBytes(SOCKET sock, int numBytes) 
{ 
    u_char buf[256]; 
    while (numBytes > 0) 
    { 
     int numRead = recv(sock, (char*)buf, min(sizeof(buf), numBytes), 0); 
     if (numRead <= 0) 
      return numRead; 
     numBytes -= numRead; 
    } 
    return 1; 
} 

ignoreBytes(gSocket, userDataLength); 
+0

感謝您的答案。我寫了自己的函數來刪除/忽略字節(類似於您的代碼)。 –