曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7351|回复: 0
打印 上一主题 下一主题

recvfrom() -- UDP 接收数据

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2010-4-3 14:40:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
函数原型
#include <sys/types.h>
#include <sys/socket.h>

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);

参数说明
      第 1 个参数 sockfd 表示正在监听端口的套接口文件描述符,由 socket() 生成。
      第 2 个参数 buf 表示接收数据缓冲区,接收到的数据将放在这个指针所指向的内存空间中。
      第 3 个参数 len 表示接收数据缓冲区的大小,系统根据这个值来确保接收缓冲区的安全,防止溢出。
      第 4 个参数 flags 是设置标志,一般设为 0。
      第 5 个参数 *src_addr 指向本地的数据结构 sockaddr_in 的指针,发送数据时发送方的地址信息存放在这个结构中。
      第 6 个参数 *addrlen 表示的是第 5 个参数所指的内容长度,可以使用 sizeof (struct sockaddr_in) 来获得。
recvfrom() 出错时返回 -1;成功时返回接收到的数据长度,数据的长度可以为 0,因此如果函数返回值为 0 并不表示发生了错误,仅能表示此时系统中接收不到数据。发生错误时,错误值保存在 errno 中,errno 的值和含义如下表所示:

含义
EGAIN
接收超时,或者套接字描述符设置为非阻塞,而此时没有数据
EGAIN/EWOULDBLOCK
此socket使用了非阻塞模式,当前情况下没有可接受的连接
EBADF
描述符非法
ECONNABORTED
连接取消
EINTR
信号在合法连接到来之前打断了 accept 的系统调用
EINVAL
socket没有侦听连接或者地址长度不合法
EMFILE
每个进程允许打开的文件描述符数量最大值已经到达
ENFILE
达到系统允许打开文件的总数量
ENOTSOCK
文件描述符是一个文件,不是 socket
EOPNOTSUPP
引用的 socket 不是流类型 SOCK_STREAM
EFAULT
参数 addr 不可写
ENOBUFS/ENOMEM
内存不足
EPROTO
协议错误
EPERM
防火墙不允许连接
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-9 14:58 , Processed in 0.062082 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表