我想在不指定緩衝區的情況下從套接字接收數據。所以我只想從傳入的數據緩衝區中移除x個字節。WinSock:從套接字中刪除數據
我有以下代碼(截斷):
recv(gSocket, NULL, userDataLength, 0);
但是,當我執行的recv()
返回值上面的代碼是SOCKET_ERROR
和WSAGetLastError()
返回WSAECONNABORTED
。此外,我的連接被關閉。
問題:使用receive函數從套接字的RX緩衝區中刪除數據是不可能的?
我想在不指定緩衝區的情況下從套接字接收數據。所以我只想從傳入的數據緩衝區中移除x個字節。WinSock:從套接字中刪除數據
我有以下代碼(截斷):
recv(gSocket, NULL, userDataLength, 0);
但是,當我執行的recv()
返回值上面的代碼是SOCKET_ERROR
和WSAGetLastError()
返回WSAECONNABORTED
。此外,我的連接被關閉。
問題:使用receive函數從套接字的RX緩衝區中刪除數據是不可能的?
我想在不指定緩衝區的情況下從套接字接收數據。
對不起,但那根本不可能。您必須提供一個緩衝區來接收字節。如果您不想使用這些字節,只需在讀入緩衝區後放棄該緩衝區即可。
我只是想從傳入的數據緩衝區中刪除x個字節。
這沒有API。您必須將字節讀入有效的緩衝區。你以後用這個緩衝區做什麼取決於你。
當我執行的recv()
返回值上面的代碼是SOCKET_ERROR
和WSAGetLastError()
返回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);
感謝您的答案。我寫了自己的函數來刪除/忽略字節(類似於您的代碼)。 –
它在哪裏說,緩衝區指針可以爲空? – EJP
不通。但我認爲這是可能的,因爲它可能在其他套接字庫上。 –
我不知道任何這樣的庫,但在任何情況下,這是一個* non sequitur。* – EJP