有没有办法保证linux recvfrom函数数收到全部数据

帐号:密码:下次自动登录{url:/nForum/slist.json?uid=guest&root=list-section}{url:/nForum/nlist.json?uid=guest&root=list-section}
贴数:1&分页:&发信人: ipangth.bbs@bbs.ustc.edu.cn (夜雨小楼), 信区: NetPRG
标&&题: Re: 有没有办法保证recvfrom函数收到全部数据?
发信站: 瀚海星云 (Sun Oct 30 11:13:02 2005)
转信站: NEWSMTH!news.newsmth.org!news2.happynet.org!bbsnews.sdu.edu.cn!USTC &&&& 【 在 -SPAM.no (:)) 的大作中提到: 】
: 标&&题: Re: 有没有办法保证recvfrom函数收到全部数据?
: 发信站: 水木社区 (Sun Oct 30 10:03:08 2005)
: 转信站: USTC!bbsnews.sdu!news.newsmth.org!NEWSMTH
: Oh,我没有描述清楚可能.&&
: 我是说如果传给recvfrom的那个buf的size太小,内核数据很大,无法传给buf
: 的那部分数据不会留给下次recvfrom调用,而是简单丢弃.&&
: en,暂时这样处理的,但这样程序变复杂了. 如果能够利用
: 到ip层的信息得到到达的udp包的真实大小,程序就简单多了,
我记得有一个类似于seek的函数可以先查询进来数据的大小
但这样做效率低了
: 特别是对是否丢包要求不高和无法期待客户端遵守通信规则的情形.
: 【 在 jameszxj (路人甲) 的大作中提到: 】
: : 标&&题: Re: 有没有办法保证recvfrom函数收到全部数据?
: : 发信站: 水木社区 (Sun Oct 30 08:08:54 2005), 转信
: : 只是在数据超过内核缓冲时才会丢,和应用层分配的接收缓冲无关,
: : 在只考虑缓冲区影响的情况下,其实只要你及时去收数据就不会丢。
: : 要保证UDP数据不会丢,在应用层要做重发、确认的一些工作才行。
: : 【 在 lo0ol (:)) 的大作中提到: 】
: : : 对于udp,当收到的数据超过recvfrom函数的接收缓冲区大小时,
: : : 超过缓冲区大小的数据会被丢弃. 有没有办法知道收到的数据大小而
: : : 交给recvfrom足够大的接收缓冲区? 谢谢!
: : ※ 来源:·水木社区 ·[FROM: 218.2.201.*]
: ※ 来源:·水木社区 newsmth.net·[FROM: 61.182.213.238]
: ※ 来源:·水木社区 newsmth.net·[FROM: 211.151.90.*]
&文章数:1&分页:匿名用户不能发表回复!|匿名用户不能发表回复!|1被浏览337分享邀请回答ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
其中src_addr是你提供的一个结构体指针,指向地址。也就是说,在你调用recvfrom之后,其内部会去读取src_addr中的地址信息。而读取的长度是由addrlen决定的。而sockaddr由于使用不便(将地址与端口信息都放在了sa_data[14]中),因此我们一般使用的是sockaddr_in或者sockaddr_in6或者sockaddr_storage,再强制转换为sockaddr。因此:1. 你对地址信息不感兴趣,可以把src_addr赋值为NULL,那么addrlen将不会被用到。2. 你用的是IPv4,那么sizeof(struct src_addr)=16,所以addrlen就应该也赋值为16。3. 你用的是IPv6,那么sizeof(struct src_addr)=28,所以addrlen应该赋值为28。4. 还有其他网络通信协议,src_addr的长度为别的值。02 条评论分享收藏感谢收起写回答帐号:密码:下次自动登录{url:/nForum/slist.json?uid=guest&root=list-section}{url:/nForum/nlist.json?uid=guest&root=list-section}
贴数:5&分页:小四★你说你最爱丁香花⊙发信人: hellguard (小四★你说你最爱丁香花⊙), 信区: NetPRG
标&&题: Re: 有没有办法保证recvfrom函数收到全部数据?
发信站: 水木社区 (Sat Oct 29 21:20:15 2005), 转信 && 你就分配一个64k大小的缓冲区呗,再大能大哪里去,16-bits && 提前查询有办法,你去UNP上翻翻,但那样没什么好处 &&&& 【 在 lo0ol (:)) 的大作中提到: 】
: 对于udp,当收到的数据超过recvfrom函数的接收缓冲区大小时,
: 超过缓冲区大小的数据会被丢弃. 有没有办法知道收到的数据大小而
: 交给recvfrom足够大的接收缓冲区? 谢谢!
: ...................
&& -- &&&&&&&&&&&&&& 也许有一天,他再从海上蓬蓬的雨点中升起, &&&&&&&&&&&& 飞向西来,再形成一道江流,再冲倒两旁的石壁, &&&&&&&&&&&& 再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... &&&&&&&&&&&&&&
&&&& ※ 来源:·水木社区 newsmth.net·[FROM: 61.51.147.*]
小四★你说你最爱丁香花⊙发信人: hellguard (小四★你说你最爱丁香花⊙), 信区: NetPRG
标&&题: Re: 有没有办法保证recvfrom函数收到全部数据?
发信站: 水木社区 (Sun Oct 30 12:05:26 2005), 转信 && 你想什么呢?怎么会不够用 && 如果你发送的UDP数据区超过64kb,肯定不会在一个完整的IP包中出现,你好好想想,
即使分片重组,这个包最大能是多少,想明白这点就理解我在说什么了 && 另,不是看setsockopt,是recvfrom的flag形参或者ioctl什么的,我现在手头没书不好查。
MSG_PEEK这个不记得是否适用UDP了,总之UNP上有讲 && 【 在 lo0ol (:)) 的大作中提到: 】
: 谢谢,我去看看. 希望setsockopt有选项.&&
: 64k有些浪费内存,而且不一定够用,有时.
&&&& -- &&&&&&&&&&&&&& 也许有一天,他再从海上蓬蓬的雨点中升起, &&&&&&&&&&&& 飞向西来,再形成一道江流,再冲倒两旁的石壁, &&&&&&&&&&&& 再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... &&&&&&&&&&&&&&
&&&& ※ 来源:·水木社区 newsmth.net·[FROM: 221.219.57.*]
小四★你说你最爱丁香花⊙发信人: hellguard (小四★你说你最爱丁香花⊙), 信区: NetPRG
标&&题: Re: 有没有办法保证recvfrom函数收到全部数据?
发信站: 水木社区 (Mon Oct 31 18:49:49 2005), 转信 && 你不是要找先行获取数据大小的办法吗,这个就可以。读取之前指定这个,然后就获取大小了,
再分配内存去读取。你是不是看书太不仔细了。 && Winsock上还有个FIONREAD可用。 && 【 在 lo0ol (:)) 的大作中提到: 】
: IP标识只有16bits,
:&&&&&&&&MSG_PEEK
: ...................
&& -- &&&&&&&&&&&&&& 也许有一天,他再从海上蓬蓬的雨点中升起, &&&&&&&&&&&& 飞向西来,再形成一道江流,再冲倒两旁的石壁, &&&&&&&&&&&& 再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... &&&&&&&&&&&&&&
&&&& ※ 来源:·水木社区 newsmth.net·[FROM: 203.86.95.*]
小四★你说你最爱丁香花⊙发信人: hellguard (小四★你说你最爱丁香花⊙), 信区: NetPRG
标&&题: Re: 有没有办法保证recvfrom函数收到全部数据?
发信站: 水木社区 (Tue Nov 15 12:47:21 2005), 转信 && 来是常来的,只是看得多写得少,最近忙啥? && 【 在 nukq (悦) 的大作中提到: 】
: ...................
&& -- &&&&&&&&&&&&&& 也许有一天,他再从海上蓬蓬的雨点中升起, &&&&&&&&&&&& 飞向西来,再形成一道江流,再冲倒两旁的石壁, &&&&&&&&&&&& 再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... &&&&&&&&&&&&&&
&&&& ※ 来源:·水木社区 newsmth.net·[FROM: 203.86.95.*]
小四★你说你最爱丁香花⊙发信人: hellguard (小四★你说你最爱丁香花⊙), 信区: NetPRG
标&&题: Re: 有没有办法保证recvfrom函数收到全部数据?
发信站: 水木社区 (Wed Nov 16 12:45:17 2005), 转信 && 没那精力维护版面了,现在做的方向也比较窄。 && 【 在 ipangth (夜雨小楼) 的大作中提到: 】
: 再去申请版主吧,比较久没人了:)
&&&& -- &&&&&&&&&&&&&& 也许有一天,他再从海上蓬蓬的雨点中升起, &&&&&&&&&&&& 飞向西来,再形成一道江流,再冲倒两旁的石壁, &&&&&&&&&&&& 再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... &&&&&&&&&&&&&&
&&&& ※ 来源:·水木社区 newsmth.net·[FROM: 203.86.95.*]
文章数:5&分页:}

我要回帖

更多关于 socket recvfrom函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信