我正在编写一个需要模拟虚拟机之间的多个连接的测试程序,出于各种原因,似乎最好的方法是使用 Unix 域套接字。我使用 SOCK_STREAM 还是 SOCK_DGRAM 并不重要,但似乎 SOCK_STREAM 对我来说更容易/更简单。
我的问题似乎与典型情况有点倒退。我想让一个客户端通过 4 个不同的套接字与服务器通信。(我可以有 4 个客户端,每个客户端都有一个套接字,但这种区别并不重要。)现在,我正在模拟的东西没有多个线程,并且只要通过其中一个“套接字”接收到数据包,就会中断”。有没有一些简单的方法可以用 Unix 套接字来模拟这个?
我相信我必须首先对所有 4 个套接字执行socket()
、bind()
和listen()
,然后对所有 4 个套接字执行一次,然后对每个套接字accept()
执行fcntl( fd, F_SETFF, FNDELAY )
一次以使它们成为非阻塞,这样我就可以以read()
循环方式检查每个套接字的数据. 有没有办法让它成为中断驱动或事件驱动的,这样我的主循环只检查套接字中的数据是否有数据?还是像这样轮询他们更好?