#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <sys/socket.h>
int accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags);
用于面向连接的socket类型(SOCK_STREAM, SOCK_SEQPACKET
)。从监听套接字待连接的队列中获取第一个连接请求,创建一个新的套接字,用新的fd指向这个新的套接字,新创建的套接字不处于监听状态。不影响监听套接字sockfd
。
addr
中返回对端地址。
注意,addrlen
虽然是个出参,但输入的时候必须初始化成sizeof(*addr)
。
如果addr
内存太小,输出的地址会被截断,这时addrlen
会大于sizeof(*addr)
。
sockfd
上有可读事件,表示有新连接接入,因此可以使用select(2),poll(2),epoll
这些来监听sockfd
。
flags
为0时,两个函数一样。flags
可以有:
fcntl(2)
了返回的错误:
addr
参数不是个可写的地址sockfd
还是个监听套接字,或者addrlen
无效sockfd
不是SOCK_STREAM
类型的原文:https://www.cnblogs.com/suntus/p/14920765.html