接收原始以太网数据包 - 时间问题

时间:2017-10-05 12:59:06

标签: c multithreading sockets networking

我有一个场景,我构建并将原始以太网数据包发送到定制的硬件设备。数据包触发设备发回的响应数据包。

我的代码执行sendto()调用以传输传出数据包,然后执行recvfrom()调用以尝试接收响应。 recvfrom()处于while循环中,因此它会一直尝试接收数据包,直到recvfrom()指示其收到的> 0字节。

我运行Wireshark确认我的传出数据包是否正确构造并发送,我也可以看到来自设备的响应数据包并且它已正确形成。

我不能做的是通过recvfrom()电话接收它。 while循环有效挂起,因为recvfrom()永远不会返回0以外的值。

我想我可能需要在recvfrom()调用之前运行的单独“侦听器”线程中进行sendto()调用。目前我的应用程序没有线程。我只是在recvfrom()之后运行sendto()

我是否可能只是通过非线程方法丢失数据包,或者是以某种方式缓冲数据包,即使它们是在执行相应的recvfrom()之前发送的,也可以接收它们? / p>

我很想知道是否存在做这种事情的事实方法。很高兴不要让我的应用程序多线程,但我可以,如果需要。

0 个答案:

没有答案