c - 通过 c 中的 ssl channel 接收一半消息

标签 c linux ssl tcp communication

我的问题是我可以使用下面的代码接收半条消息吗? 如果我想发送这样的消息:“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/

相关文章:

ssl - 在 nginx 的主域而不是子域中应用 SSL 和 www

c - 为什么 gdb 看不到 `stdio` 何时更改?

linux - Docker 容器化 从虚拟机 LAMP 部署

linux - curl:(6)无法解析主机:google.com;名称或服务未知

c - 核心实用程序中缺少 __vdso_time?

ssl - kafka : Inbound closed before receiving peer's close_notify 中的 SSL 错误

c - snprintf如何对齐字节

c++ - C/C++ 中的静态结构

c - STM32 Bare Metal C - 无法让 LED 工作

apache - 使用 SSL 和 Apache 的 DNS a 路由