linux udp socket如何不等包,立马发送一个包?
各位高手,请教问题。小弟初学linux socket网络编程。在实现一个算法,算法要求是发送udp(1472字节)报文,严格控制每个udp发送时间。举个例子就是t1时间发送udp1,t2时间发送udp2,t3时间发送udp3。。。。差不多会发送几百个包,t1,t2,t3之间的时间间隔是我(算法)严格控制的。先不考虑系统调用对时间造成的干扰(在底层发包当然最快最准)。
我想要达到的效果是应用程序一个包发完,再发第二个包。。。第三个,第四个。但是上网了解到系统会自主等包,意思就是我虽然调用write函数发第一个包,但是其实包在内核里(或者什么其他地方或者网卡那)不是立马发走,会等一段时间,然后一起发出去。(原因是不想浪费资源,一个包发一次调度一次太耗资源)。
比如举个例子假设系统是每三秒发一次包。我1s钟的时候调write函数发第一个包,2s钟时调write函数发第二个包,3s钟调用write函数发第三个udp包。但是其实在系统里,第一次调write后1号包在等2号包和3号包到了然后一起扔出去(因为等3s发一次。)。这就导致不是我想要的发包时间顺序。1号包和2,3号包的发送时间是一样的实际上。然后我统计时间戳也是一号包到达对端的时间最长,2号包3号包其次。而且每次都是这个结果。也印证了1号包在等2,3号包
有没有什么方法可以让系统不等包,立马发? 上网查了1.调用fflush函数,说是可以立马发送不等包。fflush(FILE * stream)函数如何跟udp socket接口配合用起来?貌似是写文件I/O时才能用的fflush函数。这个方法可行吗?fflush函数如何和socket一起用?2.上网还搜到了关闭GSO功能,到底哪个比较好比较合适?谢谢大家!