1

我有一个 TCP 服务器select用于通过 TCP 套接字从客户端获取数据。服务器消耗数据的速度很慢,而客户端则快得多。我的客户端发送 8 个字节的数据,每次它 - 打开一个新连接 - 写入数据 - 断开连接 因此(服务器套接字必须接受许多连接)我将 backlock 值listen增加到 500。

尽管有这个设置,但在某些时候我可以看到 -my client 在一个pthread被调用的函数中阻塞,__connect_nocancel并且这种情况发生了很多次。- 一段时间后,我的服务器开始接收无序数据。第一个混乱的数据是客户端阻塞的数据(其次是其他数据)。

我认为增加积压可能会解决此问题,但此问题并非如此。

你能帮助我吗?我在 Linux 2.6.32

干杯

AFG

4

2 回答 2

1

的 backlog 参数listen(2)通常被限制为 OS 网络堆栈内的某个值。在 Linux 上,默认值为 128。

不过,真正的问题是,正如@EJP 所说,您完全误用了 TCP。

于 2012-09-08T02:52:24.063 回答
0

如果排序很重要,您的客户端必须保持打开单个连接并通过该单个连接写入所有内容。对此没有两种方法。TCP 保证流的字节顺序。没有什么可以保证不同连接的服务器端处理的顺序。

它的效率也大大提高。目前,您每 8 个字节交换大约 8 个数据包,这意味着最多 160 个字节的开销。

于 2012-09-08T01:06:00.520 回答