| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 980 人关注过本帖
标题:recvfrom() 和 sendto() 的几点归纳
只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
 问题点数:0 回复次数:0 
recvfrom() 和 sendto() 的几点归纳
程序代码:
#include <sys/socket.h>
ssize_t recvfrom ( int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr *from,  socklen_t *addrlen);
ssize_t sendto ( int sockfd, const void *buff, size_t nbytes, int flags, const struct sockaddr *to,  socklen_t *addrlen)

这两个函数很类似与read() 和 write(), 却新增了3个额外的参数

recvfrom() , accept() , getsockname() , getpeername() 这几个函数都是把一个 socket address  从kernel 传到 process(有内到外)

而bind() , connect() , sendto() 这几个函数都是把一个 socket address  从process 传到 kernel ( 有外到内)

一个datagram的长度为0是可以接受的, UDP的情况下是

一个IP datagram 里包含IP header(IPv4 是 20字节,IPv6是40字节)

和一个8字节的 UDP header, 无数据。

这也就意味着 对于一个datagrad protocol 来说recvfrom() 返回 0 是可以被接受的,

这并不意味着对方关闭了链接。

这一点不象read()函数(如果在一个TCP socket上返回了0则是对方关闭了链接)

因为UDP是connectionless, 所以也没有关闭UDP 连接这一说法

recvfrom() 和 sendto() 都可以被用于TCP, 但实际上并没有这个必要


[ 本帖最后由 madfrogme 于 2012-11-20 17:48 编辑 ]
搜索更多相关主题的帖子: process include address void 
2012-07-28 00:11
快速回复:recvfrom() 和 sendto() 的几点归纳
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045944 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved