socket编程函数recvfrom用法.doc

socket编程函数recvfrom用法.doc

ID:51694174

大小:36.95 KB

页数:2页

时间:2020-03-15

socket编程函数recvfrom用法.doc_第1页
socket编程函数recvfrom用法.doc_第2页
资源描述:

《socket编程函数recvfrom用法.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux系统调用--recv/recvfrom函数详解功能描述:从套接字上接收一个消息。对于recvfrom,可同时应用于面向连接的和无连接的套接字。recv一般只用在面向连接的套接字,几乎等同于recvfrom,只要将recvfrom的第五个参数设置NULL。如果消息太大,无法完整存放在所提供的缓冲区,根据不同的套接字,多余的字节会丢弃。假如套接字上没有消息可以读取,除了套接字已被设置为非阻塞模式,否则接收调用会等待消息的到来。用法:#include#includessize_trecv(intsock,void*buf,size

2、_tlen,intflags);ssize_trecvfrom(intsock,void*buf,size_tlen,intflags,structsockaddr*from,socklen_t*fromlen);参数:sock:索引将要从其接收数据的套接字。buf:存放消息接收后的缓冲区。len:buf所指缓冲区的容量。flags:是以下一个或者多个标志的组合体,可通过or操作连在一起MSG_DONTWAIT:操作不会被阻塞。MSG_ERRQUEUE:指示应该从套接字的错误队列上接收错误值,依据不同的协议,错误值以某种辅佐性消息的方式传递进来,使用者应该提供足够大的缓冲区。导致错误的原

3、封包通过msg_iovec作为一般的数据来传递。导致错误的数据报原目标地址作为msg_name被提供。错误以sock_extended_err结构形态被使用,定义如下#defineSO_EE_ORIGIN_NONE0#defineSO_EE_ORIGIN_LOCAL1#defineSO_EE_ORIGIN_ICMP2#defineSO_EE_ORIGIN_ICMP63structsock_extended_err{u_int32_tee_errno;/*errornumber*/u_int8_tee_origin;/*wheretheerrororiginated*/u_int8_tee

4、_type;/*type*/u_int8_tee_code;/*code*/u_int8_tee_pad;u_int32_tee_info;/*additionalinformation*/u_int32_tee_data;/*otherdata*//*Moredatamayfollow*/};MSG_PEEK:指示数据接收后,在接收队列中保留原数据,不将其删除,随后的读操作还可以接收相同的数据。MSG_TRUNC:返回封包的实际长度,即使它比所提供的缓冲区更长,只对packet套接字有效。MSG_WAITALL:要求阻塞操作,直到请求得到完整的满足。然而,如果捕捉到信号,错误或者连接断

5、开发生,或者下次被接收的数据类型不同,仍会返回少于请求量的数据。MSG_EOR:指示记录的结束,返回的数据完成一个记录。MSG_TRUNC:指明数据报尾部数据已被丢弃,因为它比所提供的缓冲区需要更多的空间。MSG_CTRUNC:指明由于缓冲区空间不足,一些控制数据已被丢弃。MSG_OOB:指示接收到out-of-band数据(即需要优先处理的数据)。MSG_ERRQUEUE:指示除了来自套接字错误队列的错误外,没有接收到其它数据。from:指向存放对端地址的区域,如果为NULL,不储存对端地址。fromlen:作为入口参数,指向存放表示from最大容量的内存单元。作为出口参数,指向存放表

6、示from实际长度的内存单元。返回说明:成功执行时,返回接收到的字节数。另一端已关闭则返回0。失败返回-1,errno被设为以下的某个值EAGAIN:套接字已标记为非阻塞,而接收操作被阻塞或者接收超时EBADF:sock不是有效的描述词ECONNREFUSE:远程主机阻绝网络连接EFAULT:内存空间访问出错EINTR:操作被信号中断EINVAL:参数无效ENOMEM:内存不足ENOTCONN:与面向连接关联的套接字尚未被连接上ENOTSOCK:sock索引的不是套接字

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。