开发者
资源
文档评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

accept4

接口名称

accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)

接口描述

在侦听socket上接收新的连接,并设置socketFd属性。

参数说明

参数说明备注
sockfd通信节点描述符必须是侦听socket。
*addr通信对端地址可以为空指针。会填写为对端socket的地址,长度根据协议地址类型而定,参考DP_Socket接口支持的协议。
*addrlen地址长度可以为空指针。必须设置为可以包含地址结构体的长度,函数返回时设置为实际的长度。
flagsflags标志位处理标志位支持0,SOCK_NONBLOCK,SOCK_CLOEXEC(默认使能)。

返回值

类型:int

  • 非负数:接收的新socket(套接字),表示成功

  • -1:表示失败,并设置errno以指示错误类型

错误码

错误码描述
EAGAIN or EWOULDBLOCK套接字标记为非阻塞,并且不存在要接收的链接。
EINTR被信号中断。
EINVAL入参addrlen的值小于对应地址族长度或大于INT_MAX,或者未侦听,导致套接字不能建立连接。
EINVALflags参数非0、SOCK_CLOEXEC、SOCK_NONBLOCK。
EOPNOTSUPP引用的套接字不是TCP类型。
EACCES进程没有适当的权限。
ENOBUFS系统中可用资源不足。
ENOMEM内存申请失败。
EMFILE进程的file数量超过max_tcpcb。
EFAULT入参addrlen为空且addr不为空。
ELIBBAD系统符号加载失败。
EINVAL套接字存在,但是套接字对应的数据结构存在异常。
EPERM信号退出流程中,不允许调用该函数接口。
EINVAL共线程部署模式时,sockfd的worker id和当前线程的worker id不一致,即socket跨worker线程调用。