简体   繁体   中英

Reading from a socket until certain character is in buffer

I am trying to read from a socket into a buffer until a certain character is reached using read(fd, buf, BUFFLEN) .

For example, the socket will receive two lots of information separated by a blank line in one read call.

Is it possible to put the read call in a loop so it stops when it reaches this blank line, then it can read the rest of the information later if it is required?

A simple approach would be to read a single byte at a time until the previous byte and the current byte are new-line characters, as two consecutive new-line characters is a blank line:

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++;
}

Any unread data will have to be read at some point if newly sent data is to be read.

You still need to read from the socket if you want to access this information later, otherwise it will be lost. I think best implementation would be to keep looping reading from the socket, while another process/thread is launched to perform any operation you want when a blank like is received.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM