我想在没有指定缓冲区的情况下从套接字接收数据。所以我只想从传入的数据缓冲区中删除x个字节。
我有以下代码(截断):
recv(gSocket, NULL, userDataLength, 0);
但是当我执行上面的代码时,recv()
的返回值为SOCKET_ERROR
而WSAGetLastError()
返回WSAECONNABORTED
。此外,我的连接已关闭。
问题:是否不可能使用receive函数从套接字的RX缓冲区中删除数据?
答案 0 :(得分:2)
我想在没有指定缓冲区的情况下从套接字接收数据。
抱歉,但这根本不可能。您必须提供一个缓冲区来接收字节。如果您不想使用这些字节,只需在读入后丢弃缓冲区。
我只想从传入数据缓冲区中删除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);