Winsock:从套接字中删除数据
WinSock: Remove data from socket
我想从插座接收数据而不指定缓冲区。因此,我只想从传入的数据缓冲区中删除X字节。
我有以下代码(截断):
recv(gSocket, NULL, userDataLength, 0);
但是,当我执行上方代码时,recv()
的返回值是SOCKET_ERROR
,WSAGetLastError()
返回WSAECONNABORTED
。此外,我的连接已关闭。
问题:不可能使用接收函数从插座的RX缓冲区删除数据?
我想从插座接收数据,而无需指定缓冲区。
对不起,但这根本不可能。您必须提供一个缓冲区才能接收字节。如果您不想使用字节,请在阅读后只需丢弃缓冲区即可。
我只想从传入数据缓冲区中删除X字节。
没有API。您必须将字节读取为有效的缓冲区。之后您使用该缓冲区的工作取决于您。
当我执行上方代码时,
recv()
的返回值为SOCKET_ERROR
,WSAGetLastError()
返回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);
相关文章:
- 从 Typedef 数据类型中删除常量
- 从输入中删除重复项,而不使用任何数据结构
- 删除使数据处于"错误状态"的默认构造函数的模式?
- 从自定义数据类型向量中删除重复元素
- 如何使用C++删除/更新txt文件中的特定数据
- 如何使用C++删除/更新txt文件中的特定数据?
- 如何从 txt 文件中删除数据/内容
- 如何根据偏移从文件中删除数据
- 如何在返回一次数据后从类实例中删除数据
- 凯撒密码删除数据
- Winsock:从套接字中删除数据
- 为什么我的矢量删除数据
- 设置/删除窗口子类时,正确传递/删除数据
- 双重删除数据不会崩溃
- 具有非常快速的内>数据查找和快速反向查找(搜索/插入/删除数据)的压缩字典?
- 当构造函数抛出异常时,如何删除数据成员的内存
- 从节点中删除数据
- 仅重定向子进程stdin,并从stdout和stderr中删除数据
- 删除数据文件中的条目
- 从链表中删除数据