【问题标题】:Can multiple threads of a multithreaded application open sockets to the same server?多线程应用程序的多个线程可以打开到同一服务器的套接字吗?
【发布时间】:2014-01-24 21:26:40
【问题描述】:

我有一个负载测试应用程序,我想启动多个线程,每个线程都会打开一个到同一服务器的套接字并与之通信。这可能还是我必须 fork() 或运行单个线程应用程序的多个实例?

[来自 cmets 的更新:]

我似乎遇到的问题是,对 socket() 的多次调用似乎都返回了 0 值。因此,当线程尝试与服务器通信时,只有一个成功,而其余的都是等待响应并超时。

【问题讨论】:

  • 线程试图连接到哪个服务器软件?
  • 您确定对socket() 的调用返回0socket() 通过返回 -1 表示错误。

标签: c multithreading sockets pthreads


【解决方案1】:

当然!唯一会出现问题的情况是它们都充当服务器并尝试在同一端口上侦听。听起来您将它们用作客户端,在这方面,您可以拥有任意数量的客户端(只要操作系统不会耗尽您进程的文件描述符)。

【讨论】:

  • 我似乎遇到的问题是对 socket() 的多次调用似乎都返回了 0 值。因此,当线程尝试与服务器通信时,只有其中一个成功,而其他人正在等待响应并超时。
  • 您使用的是什么平台/操作系统和编译器?
  • 红帽企业 Linux。
  • RHEL 应该没有问题。贴一些代码sn-ps给我们看看。
  • 只要操作系统没有耗尽临时出站端口。
【解决方案2】:

是的,您可以创建多个客户端套接字连接到同一个服务器 IP/端口,只要您没有将这些客户端套接字同时绑定到同一个本地 IP/端口。默认情况下,connect() 对随机本地端口执行隐式 bind(),除非事先显式调用了 bind()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2012-05-17
    • 2012-07-14
    相关资源
    最近更新 更多