首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一个函数来确定在unix域套接字上要读取的字节数?

是否有一个函数来确定在unix域套接字上要读取的字节数?
EN

Stack Overflow用户
提问于 2020-12-08 18:23:18
回答 1查看 326关注 0票数 0

其目的是与使用json-rpc的OpenEthereum服务器进行交互。

问题一旦连接起来,我只需要在重新计算数据时做出反应,因为目的是订阅一个事件,所以我需要recv()函数来阻塞。但是在这种情况下,如果我要求在缓冲区中读取比服务器发送的内容更多的内容,请求将被阻塞。

OpenEthereum服务器用一个linefeed \n字符分隔它的请求,但我不知道这有什么帮助。

我知道的关于简单地等待recv() 超时的。但是我使用C++和ipc比我的竞争对手在套利上有更好的延迟,这也意味着我需要尽可能少的上下文切换。

如何有效地阅读无法预先确定长度的邮件?

EN

回答 1

Stack Overflow用户

发布于 2020-12-08 19:58:05

是否有一个函数来确定在unix域套接字上要读取的字节数?

不-只需继续进行非阻塞读取,直到返回EAGAINEWOULDBLOCK

可能有一个特定于平台的ioctlfcntl,但是您还没有命名一个平台,它既不是可移植的,也不是必需的。

如何有效地阅读无法预先确定长度的邮件?

只需对缓冲区进行非阻塞读取,该缓冲区足够大,足以包含您可能收到的最大消息。

我只需要在重新划分数据时做出反应,因为目的是订阅一个事件,所以我需要recv()函数来阻止

你混淆了两件事。

  1. 如何在套接字变得可读时得到通知: 通过使用selectpoll来等待套接字的可读性。只要阅读他们的手册,那是他们最常见的用例。
  2. 如何无限期地读取要读取的所有可用内容: 通过执行非阻塞读取,直到返回EWOULDBLOCKEAGAIN

对于这种基于流的协议,逻辑上还有第三步,即在发生部分消息时正确地管理缓冲区。哦,实际上解析了这些消息,但我假设您已经有了一个JSON库。

这是完全正常的,basic UNIX I/O设计。这不是一种奇异的优化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65204661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档