Skip to content
On this page

recv(2)


标签:linux/api  

函数原型

功能:接收对端发送过来的数据包

c
#include <sys/types.h> 
#include <sys/socket.h>  
ssize_t recv(int sockfd, void *buf, size_t len, int flags); 
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, 
                 struct sockaddr *src_addr, socklen_t *addrlen);

参数

  • int sockfd:需要填写通信用的套接字文件描述符,即accept函数获取到的新的文件描述符;
  • void *buf:该指针指向的内存空间中会存储接收到的数据,可以接收任意类型数据;
  • size_t len:指定要接收多少个字节的数据;
  • int flags
    • 0:阻塞方式接收,当对端没有发送数据的时候,该recv函数阻塞;
    • MSG_DONTWAIT:非阻塞;

recvfrom 独有

📣 recv 相当于 recvfrom 后面两个参数填空 NULL,即放弃接受到的地址

  • src_addr:地址信息结构体,参考 bind(2)
  • addrlen :真实地址信息结构体的大小,注意是指针类型

返回值

  • > 0 成功,返回成功获取的字节数
  • = 0 对端关闭,返回 0
  • - 1 失败,重置 errno

📣 注意:

  1. recv 最后的 flags 填 0 时,与 read 函数功能完全一致,所以 recv 可以用于 read 函数的替换;
  2. send 最后的 flags 填 0 时,与 write 函数功能完全一致,所以 send 可以用 write 函数替换

Last updated: