Winsock:从套接字中删除数据

WinSock: Remove data from socket

本文关键字:删除 数据 套接字 Winsock      更新时间:2023-10-16

我想从插座接收数据而不指定缓冲区。因此,我只想从传入的数据缓冲区中删除X字节。

我有以下代码(截断):

recv(gSocket, NULL, userDataLength, 0);

但是,当我执行上方代码时,recv()的返回值是SOCKET_ERRORWSAGetLastError()返回WSAECONNABORTED。此外,我的连接已关闭。

问题:不可能使用接收函数从插座的RX缓冲区删除数据?

我想从插座接收数据,而无需指定缓冲区。

对不起,但这根本不可能。您必须提供一个缓冲区才能接收字节。如果您不想使用字节,请在阅读后只需丢弃缓冲区即可。

我只想从传入数据缓冲区中删除X字节。

没有API。您必须将字节读取为有效的缓冲区。之后您使用该缓冲区的工作取决于您。

当我执行上方代码时,recv()的返回值为SOCKET_ERRORWSAGetLastError()返回WSAECONNABORTED

我本来可以预料WSAEFAULT

不可能使用接收函数从套接字的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);