以下是该方案:
我在Linux中有一个基于选择的套接字服务器,它一次处理单个数据包。让我们说几个数据包正在高速运行,当我的进程处于当前数据包的处理阶段时,我达到了一个断点。我的问题是,发送到我的服务器进程的数据包会发生什么变化,并且在断点处停止。他们会被放弃吗?或者OS会缓冲这些数据包并在它出现断点时传递给我的进程吗?
虽然我有一些想法,但我想在这里向大师证实,并且我可能会了解有关套接字行为的更多信息。
任何帮助将不胜感激。
答案 0 :(得分:1)
传入的数据包将由OS内核排队,直到其缓冲区变满。将丢弃任何更多的数据包,但根据连接的类型,内核可能会发信号通知另一端停止发送(TCP也称为SOCK_STREAM,UDP又称SOCK_DGRAM可能赢了)。 发件人应该准备好处理这种情况。
缓冲区的大小取决于系统;您可以查询大小和/或更改它(如何完成此操作通常取决于操作系统)。
如果您的进程因调试而暂停,只是缓慢,忙于等待其他事件或进行交换,这并不重要;如果它没有从套接字读取数据,它将排队。