首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

嵌入式linux udp协议的socket发送数据有关问题

2012-09-04 
嵌入式linux udp协议的socket发送数据问题嵌入式linux,一个接收组播的客户端,加入组播setsockopt(s,IPPROT

嵌入式linux udp协议的socket发送数据问题
嵌入式linux,一个接收组播的客户端,加入组播
setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char *)&mreq,sizeof(mreq))

退出组播
setsockopt(s,IPPROTO_IP,IP_DROP_MEMBERSHIP,(char *)&mreq,sizeof(mreq))

如何保证在调用这两个函数之后关闭socket(close(s))之前,socket的数据能够正常发送呢?


igmp_open(igmpaddr[i]);//初始化
igmp_join();//加入组播
igmp_leave();//退出组播
igmp_free();//关闭socket

如果按照这个顺序调用,中间不做什么操作,抓包看不到组播相关的数据(加入组播消息和退出组播消息)。
如果调用函数之间usleep 一小段时间,相关消息就能抓到。
我怀疑在执行setsockopt函数的时候数据并没有发送,而是在socket的缓冲区,结果没有来得及发送就关闭了socket,导致数据被丢弃了。
不过只是在leave和free函数之间调用usleep,同样是抓不到相关消息。这个比较奇怪。

嵌入式的开发板上测试,在ubuntu的pc上也做过测试,会有同样的问题。只是pc上usleep时间可以短一点。

请问:这个问题朝这方面考虑正确吗?如果正确,socket的发送数据该如何保证正常发送?
谢谢

[解决办法]
使用shutdown函数吧。
[解决办法]
看一下,man 7 socket手册里面的setsockopt的SO_LINGER选项;这个选项可以解决上面的问题;

热点排行