linux sendto 速度慢,UDP Socket 广播中sendto()耗时过长

在Linux环境中,使用UDP Socket进行广播时遇到sendto()函数响应慢的问题。通过设置SO_SNDTIMEO超时时间可以缩短响应时间,但可能导致丢包增加。点对点UDP传输速度快但不满足广播需求。尝试使用UDP多播虽比广播快但仍不理想。最终采用UDP单播,向每个目标发送两次数据以实现快速传输。
摘要由CSDN通过智能技术生成

UDP Socket

广播中,sendto()将数据发送到一个结尾为“255”的IP地址,应用中发现sendto()函数耗时过长。参考了“http://topic.csdn.net/t/20040722/22/3201560.html”中的内容后,经过在自己的局域网内实验,得到以下经验:

1、广播到“*.*.*.255”耗时很长(此时局域网内只要很少机台机子工作并接受该广播数据,而不是整个IP段的机子都在工作),可以用setsockopt函数设置sendto的超时时间:

SetSendTimeOutValue(unsigned int usec)

{

if(

!IsValid() ) return false;

int sta =

-1;

int

msec;

msec =

usec/1000;

if(msec

< 1) msec = 1;

unsigned int

seco  = (unsigned int)usec/1000000;

unsigned int

useco = usec00000;

struct

timeval tv_out;

tv_out.tv_sec  = seco;

tv_out.tv_usec = useco;

#ifdef _WIN32

sta =

setsockopt(isocket, SOL_SOCKET, SO_SNDTIMEO, (char

*)&msec, sizeof(msec));

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值