我的问题是我可以使用下面的代码接收半条消息吗? 如果我想发送这样的消息:“MESSAGE\n” 如果 channel 很慢,我会只收到 M 字符吗?
和代码部分:
fd.fd = c->socket;
fd.events = POLLIN;
bzero(received, sizeof(received));
result = poll(&fd, 1, time);
if(result > 0)
{
i = SSL_read ( (SSL *)c->sslHandle, (char*)received, INCOMING_BUFFERSIZE);
result = SSL_get_error(c->sslHandle, i);
...
}
因为在没有收到“\n”符号之前我什么也没有收到。
如何确保我只接受消息末尾带有\n 的消息。
感谢帮助,
塔玛斯
编辑:我使用的版本是 1.0.1c
最佳答案
套接字是基于流的,这意味着您得到的是字节流,而不是消息。因此,通过一次 recv() 调用,您可以获得从 1 到已发送数据的所有字节。您需要将数据放入某个中间缓冲区并分析缓冲区中的某些标记(在您的情况下为\n )。
关于c - 通过 c 中的 ssl channel 接收一半消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16795146/