在88个线程中使用的TCP / IP套接字C程序中的连接失败

时间:2018-02-12 06:52:45

标签: multithreading sockets tcp pthreads tcp-ip

我使用下面提到的TCP IP套接字代码在客户端和服务器机器的88个线程之间传输数据。

每个线程都分配给不同的核心。是的,它是88核心机器。

每个套接字都在创建套接字并执行发送或接收操作。

每个套接字分配给不同的端口号。 (端口号从8020到8108)

下面提到的代码分别用于每个服务器和客户端代码线程。

这里的问题是,对于少数执行,在某些套接字或线程中,客户端接收的数据与服务器发送的数据匹配。

然而在某些执行中,数据在100个插槽中不匹配。我发现,对于大约50个套接字/线程数据缓冲区匹配但是休息,它们不匹配。

那些不匹配的,有时会发出错误,说“通过对等方重置连接”或“连接失败”,然后从函数返回。

为什么这个错误会在少数套接字和少数执行中随机发生?

为单个线程实现的此示例程序工作正常。当88个线程运行时,问题出现在多线程环境中。

尝试了几个问题排查步骤:

  1. 更改端口号范围。
  2. 在系统监控器中验证数据速率大约为117 MB / s,因此我们可以降低数据速率。
  3. 验证在服务器代码中执行“发送”操作时没有错误。数据读取失败仅发生在客户端代码中。
  4. 示例代码位于https://www.geeksforgeeks.org/socket-programming-cc/

    链接

    我们使用了相同的API但是88个线程而不是1个线程。

0 个答案:

没有答案