从带有MSG_PEEK标志的偏移处的套接字读取
Reading from a socket at an offset with MSG_PEEK flag?
我想摆脱从套接字读取的顺序和缓慢的方式,我们在其中使用:
struct PACKET_STRUCT{
int PacketType;
char buffer[50];
};
char buffer[sizeof(PACKET_STRUCT)];
struct sockaddr_storage addr;
socklen_t fromlen = sizeof(addr);
int iByteCount = recvfrom(CProperties->m_iSocket, buffer, sizeof (buffer), MSG_PEEK, (struct sockaddr*)&addr, &fromlen);
这意味着,如果客户端向我发送PACKET_STRUCT(数据包#1)和另一个PACKET_STRUCT(数据包#2),那么在我能够从数据包#2读取之前,我必须读取数据包#1。
有没有一种方法可以让我在recvfrom中偏移,从(PACKET_STRUCT)的大小开始,这样我就可以在不读取数据包#1的情况下读取数据包#2?
依此类推sizeof(PACKET_STRUCT)*2以读取数据包#3。
我知道有一个pread()允许在某个偏移量读取文件描述符,但我想保留MSG_PEEK标志。
还有一个lseek()函数可以设置文件描述符的位置,但我将让几个工作线程读取该文件描述符(我不希望使用互斥,因为这也是顺序的。)
所以我的问题是,是否有类似recvmsg的函数带有偏移和MSG_PEEK标志?
没有在套接字上查找或跳过数据的概念,所以不能这样做。(lseek/read不能在套接字上使用)
有些平台允许您使用recvmmsg在一次调用中接收多个数据报,如果您不关心第一条消息,只需接收并忽略它
相关文章:
- 套接字读取后,我在缓冲区中看到意外输入
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- 不要从输入队列套接字读取数据
- 使用RAW套接字读取ICMP响应
- UDP 套接字读取最后一个传入字节
- CAN套接字读取帧较晚
- Java 套接字读取在第二次读取时返回奇怪字符
- 如何使用 recv 或 C++ 中的读取功能从 tcp 套接字读取大请求
- C++ 从末尾包含空字符的套接字读取字符串
- 是否可以在使用 Boost::asio 之前从套接字读取后执行async_handshake
- C++,在阻塞模式下从套接字读取所有可用字节的最佳方法
- 使用 QT 从套接字读取
- 如何检测我是否有要从套接字读取的内容?(c++)
- 为什么从套接字读取时 CAN 总线帧 ID 向后?
- 从套接字读取到缓冲区
- 从套接字读取和向套接字写入
- C 从套接字读取到std :: String
- JAVA:我无法从套接字读取文本,通过C++程序发送
- boost::asio 从套接字读取 n 个字节到 Streambuf
- 无法从TCP套接字读取