我有一个场景,我构建并将原始以太网数据包发送到定制的硬件设备。数据包触发设备发回的响应数据包。
我的代码执行sendto()
调用以传输传出数据包,然后执行recvfrom()
调用以尝试接收响应。 recvfrom()
处于while循环中,因此它会一直尝试接收数据包,直到recvfrom()
指示其收到的> 0字节。
我运行Wireshark确认我的传出数据包是否正确构造并发送,我也可以看到来自设备的响应数据包并且它已正确形成。
我不能做的是通过recvfrom()
电话接收它。 while循环有效挂起,因为recvfrom()
永远不会返回0以外的值。
我想我可能需要在recvfrom()
调用之前运行的单独“侦听器”线程中进行sendto()
调用。目前我的应用程序没有线程。我只是在recvfrom()
之后运行sendto()
。
我是否可能只是通过非线程方法丢失数据包,或者是以某种方式缓冲数据包,即使它们是在执行相应的recvfrom()
之前发送的,也可以接收它们? / p>
我很想知道是否存在做这种事情的事实方法。很高兴不要让我的应用程序多线程,但我可以,如果需要。