eaccept 子程序

用途

接受套接字上的连接,创建新的套接字。 eaccept子程序与accept 子程序类似,但增加了sec_labels_t结构。 sec_labels_t结构读取启用了可信AIX®的系统在传入连接中接收到的灵敏度级别 (SL)。

标准 C 库 (libc.a)

语法

#include <sys/socket.h>
#include <sys/mac.h>
int eaccept ( Socket,  Address,  AddressLength, Label)
int Socket;
struct sockaddr *Address;
socklen_t *AddressLength;
sec_labels_t *Label;

描述

eaccept子程序会提取待处理连接队列中的第一个连接,创建一个与指定套接字属性相同的新套接字,并为该套接字分配一个新的文件描述符。

如果监听队列中没有连接请求,eaccept子程序将执行以下操作:
  • 塞阻塞类型的调用套接字,直到出现连接。
  • 对于标记为非阻塞的套接字,返回EWOULDBLOCK错误代码。

被接受的套接字无法接受更多连接,但原套接字仍保持打开状态,可以接受更多连接。

eaccept子程序只用于 SOCK_STREAM 类型的套接字。 如果指定了有效的标签 参数,则会将传入连接的 SL 返回给应用程序。

参数

描述
套接字 指定使用socket子程序创建的套接字,该套接字已通过绑定ebind子程序与地址绑定,并已成功调用listen子程序。
地址 指定一个结果参数,其中包含通信层已知的连接实体地址。 地址参数的具体格式由通信所在的域决定。
AddressLength 指定一个参数,该参数最初包含 地址参数所指向的空间大小。 返回时,参数包含返回地址的实际长度(以字节为单位)。 eaccept子程序用于SOCK_STREAM类型的套接字。
标号 指定一个结果参数,其中包含输入连接上接收到的 SL。

返回值

描述
成功 接受套接字的非负数套接字描述符
失败 -1

错误代码

如果以下情况中的一个或多个为真, eaccept子程序将不成功:

描述
EBADF Socket参数无效。
EINTR eaccept函数在有效连接到来之前被一个信号中断。
EINVAL s引用的套接字当前不是监听套接字,或已被shutdown 关闭。 在允许接受之前,必须进行监听
EMFILE 每个进程打开的文件描述符数量超过系统限制(OPEN_MAX)。
ENFILE 打开的文件数超过允许的最大值。
ENOTSOCK Socket参数指的是文件,而不是套接字。
EOPNOTSUPP 引用的套接字不属于 SOCK_STREAM 类型。
EFAULT 地址参数不在用户地址空间的可写部分。
EWOULDBLOCK 套接字被标记为非阻塞,不接受任何连接。
ENETDOWN 套接字所关联的网络已关闭。
ENOTCONN 插座未处于连接状态。
ECONNABORTED 客户端中止了连接。
EPERM MLS MAC 检查失败。