c++ SSL_read如何读取多行数据
时间: 2024-03-28 16:42:31 浏览: 132
在使用SSL_read读取多行数据时,需要考虑以下几点:
1. SSL_read函数返回的是读取到的数据长度,而不是以 '\n' 或 '\r\n' 作为分隔符的行数。因此,需要自己处理分隔符。
2. 在读取一行数据时,需要判断剩余数据长度是否大于等于一行数据的最大长度,否则可能会出现截断数据的情况。
3. 在读取完一行数据后,需要判断剩余数据是否还有下一行,如果有则需要继续读取。
下面是一个示例代码,用于读取多行数据:
```
#define MAX_LINE_LEN 1024
int read_lines(SSL *ssl, std::vector<std::string>& lines)
{
char buf[MAX_LINE_LEN];
int len, total_len = 0;
std::string line;
bool eof = false;
while (!eof) {
len = SSL_read(ssl, buf, sizeof(buf));
if (len <= 0) {
int err = SSL_get_error(ssl, len);
if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) {
continue;
} else {
return err;
}
}
total_len += len;
const char *p = buf, *end = buf + len;
while (p < end) {
const char *q = (const char*)memchr(p, '\n', end - p);
if (!q) {
line.append(p, end - p);
break;
} else {
line.append(p, q - p + 1);
p = q + 1;
lines.push_back(line);
line.clear();
}
}
if (len < sizeof(buf)) {
eof = true;
}
}
return total_len;
}
```
这个代码使用了一个 std::vector 来保存每一行数据,可以根据实际需求进行修改。
阅读全文