相关疑难解决方法(0)

在Linux上编写多线程TCP服务器

在工作中,我的任务是将TCP服务器作为Modbus从设备的一部分来实现.我已经在堆栈交换和一般的互联网上做了很多阅读(包括优秀的http://beej.us/guide/bgnet/),但我正在努力解决设计问题.总之,我的设备只能接受2个连接,并且在每个连接上都是传入的modbus请求,我必须在主控制器循环中处理这些请求,然后回复成功或失败状态.我有如何实现这一点的以下想法.

  1. 有一个创建,绑定,侦听和接受连接的侦听器线程,然后生成一个新的pthread来监听连接以获取传入数据并在空闲超时期限后关闭连接.如果活动线程的数量当前为2,则立即关闭新连接以确保仅允许2个.

  2. 不要从侦听器线程生成新线程,而是使用select()来检测传入的连接请求以及活动连接上的传入modbus连接(类似于Beejs指南中的方法).

  3. 创建2个侦听器线程,每个线程创建一个套接字(相同的IP和端口号),可以阻止accept()调用,然后关闭套接字fd并处理连接.在这里,我(或许天真)假设这将只允许最多2个连接,我可以使用阻塞读取来处理.

我一直在使用C++,但我对Linux开发还不熟悉.我真的很欢迎任何关于上述哪种方法最好的建议(如果有的话)以及我对Linux的经验不足意味着他们中的任何一个都是非常糟糕的想法.我希望避免fork()并坚持使用pthreads,因为传入的modbus请求将被排队并定期从主控制器循环读取.提前感谢任何建议.

c++ sockets linux multithreading pthreads

6
推荐指数
1
解决办法
5271
查看次数

标签 统计

c++ ×1

linux ×1

multithreading ×1

pthreads ×1

sockets ×1