recv、recvfrom[通俗易懂]

2022-09-15 15:43:29 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

1、recvfrom()

接收一个数据报并保存源地址。(这里是windows中的头文件,Linux的用法在下面的那个实例)

头文件:#include <sys/types.h> #include <sys/socket.h>

int recvfrom(int 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 recv(int 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 传给系统调用的参数不正确.

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163451.html原文链接:https://javaforall.cn

0 人点赞