在工作中,我被要求实现一个TCP服务器作为Modbus从机设备的一部分。我在这里和互联网上(包括优秀的http://beej.us/guide/bgnet/)阅读了很多资料,但我正在处理一个设计问题。简而言之,我的设备只能接受2个连接,在每个连接上都会有传入的Modbus请求,我必须在我的主控制器循环中处理这些请求,然后回复成功或失败状态。我有以下几种实现方式的想法。
- 有一个监听线程,创建、绑定、监听和接受连接,然后生成一个新的pthread来监听连接上的传入数据,并在空闲超时期间关闭连接。如果活动线程数目已经是2,新的连接将立即关闭以确保只允许2个连接。
- 不从监听线程生成新线程,而是使用select()来检测传入的连接请求以及活动连接上的传入Modbus连接(类似于Beejs指南中的方法)。
- 创建2个监听线程,每个线程创建一个套接字(相同的IP和端口号),可以阻塞在accept()调用上,然后关闭套接字fd并处理连接。在这里,我(也许是天真地)假设这将只允许最多2个连接,我可以使用阻塞读来处理它们。
accept
上阻塞,而是使用短暂或无超时的select
(或使侦听套接字非阻塞并使用accept
并检查EAGAIN
/EWOULDBLOCK
)来知道何时可以接受连接。 - Some programmer dude