recv、recvfrom[通俗易懂]

1、recvfrom() 接收一个数据报并保存源地址。(这里是windows中的头文件,Linux的用法在下面的那个实例) 头文件:#include <sys/types.h>   #include <sys/socket.h> int recvfromint s, void *buf, int len, unsigned int flags, struct sockaddr *from,int *fromlen); s:标识一个已连接
套接口的描述字。 buf:接收
数据缓冲区。 len:
缓冲区长度。 flags:调用操作方式。 from:(可选)
指针,指向装有源地址的缓冲区。 fromlen:(可选)指针,指向from缓冲区长度值。
2、recv) 头文件:#include <sys/types.h>   #include <sys/socket.h>

定义函数:int recvint s, void *buf, int len, unsigned int flags);

函数说明:recv)用来接收远端主机经指定的socket 传来的数据, 并把数据存到由参数buf 指向的内存空间, 参数len 为可接收数据的最大长度.

参数 flags 一般设0. 其他数值定义如下:

1、MSG_OOB 接收以out-of-band 送出的数据.

2、MSG_PEEK 返回来的数据并不会在系统内删除, 如果再调用recv)会返回相同的数据内容.

3、MSG_WAITALL 强迫接收到len 大小的数据后才能返回, 除非有错误或信号产生.

4、MSG_NOSIGNAL 此操作不愿被SIGPIPE 信号中断返回值成功则返回接收到的字符数, 失败返回-1,错误原因存于errno 中.

错误代码:
   EBADF 参数s 非合法的socket 处理代码
   EFAULT 参数中有一指针指向无法存取的内存空间
   ENOTSOCK 参数s 为一文件描述词, 非socket.
   EINTR 被信号所中断
   EAGAIN 此动作会令进程阻断, 但参数s 的socket 为不可阻断
   ENOBUFS 系统的缓冲内存不足.
   ENOMEM 核心内存不足
   EINVAL 传给系统调用的参数不正确.

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注