首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流数据的缓冲

流数据的缓冲
EN

Stack Overflow用户
提问于 2010-05-14 15:46:00
回答 1查看 235关注 0票数 2

我试着开发一个简单的IRC机器人。首先,我想为这个项目想出一个合适的设计。我现在想知道的事情之一是读取机制。我在Linux系统上开发了这个机器人。(Fedora 12)要从套接字读取,我使用系统调用" read ()“。我计划以以下方式使用读取功能(代码只是一个例子。不是来自最终产品的东西):

代码语言:javascript
复制
while (uBytesRead = read(iServerSocket, caBuffer, MAX_MESSAGE_SIZE))
{
   //1. Parse the buffer and place it into a Message structure.
   //2. Add the message structure to a linked list that will act as a queue of message that are to be processed.
}

这段代码将在它自己的线程中运行。我选择这个选项是因为我希望在读取之间有尽可能小的延迟。(写将以同样的方式实现)这都是基于一些假设,我想澄清一下。我的问题是:如果以如此快的速度接收到如此多的数据,那么读取和处理数据(在本例中只是解析数据)的速度会比数据进入的速度慢些。我假设系统会缓冲这些数据。这是正确的假设吗?如果是的话:

  1. 这个缓冲区有多大?当这个缓冲区满了时,
  2. 会用不入的数据发生什么?
  3. 使我的应用程序免受垃圾邮件的保护,我如何才能最好地处理它?

我希望我把我的问题解释得够清楚了。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-14 16:17:45

IRC使用TCP套接字进行网络连接。Linux/Posix TCP套接字具有一个用于发送的数据缓冲区和一个用于接收的数据缓冲区。您可以使用setsockopt()和SO_SNDBUF/SO_RCVBUF调整缓冲区的大小。

TCP具有流控制功能,因此当接收缓冲区已满时,操作系统将发送拥塞通知。不适合缓冲区的接收包将不会被接收方确认,最终将由发送方重新发送。

所以这不用担心。重要的是,当套接字的发送缓冲区被填满时,发送方程序是什么?一些程序将关闭套接字,其他程序只会丢弃写入的数据,然后再试一次,而其他程序可能会在内部缓冲。

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

https://stackoverflow.com/questions/2835489

复制
相关文章

相似问题

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