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 检查失败。 |