我正在尝试从套接字读取到缓冲区,直到使用read(fd, buf, BUFFLEN)
.
例如,套接字将在一次读取调用中接收由空行分隔的两批信息。
是否可以将读取调用置于循环中,以便在到达此空白行时停止,然后如果需要,它可以稍后读取其余信息?
我正在尝试从套接字读取到缓冲区,直到使用read(fd, buf, BUFFLEN)
.
例如,套接字将在一次读取调用中接收由空行分隔的两批信息。
是否可以将读取调用置于循环中,以便在到达此空白行时停止,然后如果需要,它可以稍后读取其余信息?
一个简单的方法是一次读取一个字节,直到前一个字节和当前字节是换行符,因为两个连续的换行符是一个空行:
size_t buf_idx = 0;
char buf[BUFFLEN] = { 0 };
while (buf_idx < BUFFLEN && 1 == read(fd, &buf[buf_idx], 1)
{
if (buf_idx > 0 &&
'\n' == buf[buf_idx] &&
'\n' == buf[buf_idx - 1])
{
break;
}
buf_idx++;
}
如果要读取新发送的数据,则必须在某个时候读取任何未读取的数据。
如果您以后想访问此信息,您仍然需要从套接字中读取,否则会丢失。我认为最好的实现是保持从套接字循环读取,同时启动另一个进程/线程以在收到空白时执行您想要的任何操作。