man 2 accept

Posted 史昊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了man 2 accept相关的知识,希望对你有一定的参考价值。

名称

  accept, accept4——接受套结字连接

摘要

  

#include <sys/types.h>    /* Portable consideration */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

#define _GNU_SOURCE    /*See feature_test_macros(7) */
int accept(int sockfd,struct sockaddr *addr, socklen_t *addrlen,int flags);

描述

  accept系统调用被用于面向连接的套结字类型(SOCK_STREAM,SOCK_SEQPACKET)。它提取排队等待连接sockfd的第一个连接请求,并且创建一个新的连接套结字,返回指向这个连接套结字的文件描述符,新创建的连接套结字不处于监听状态,而监听套结字sockfd也不受函数调用的影响,继续保持监听状态。

  参数addr是一个指向sockaddr结构体的指针,这个结构体会被通信对端套结字的地址赋值。地址的格式有套结字地址族和相应的协议决定。如果addr为NULL,那么不会发生填充,addrlen也不会被用到,所以也应该为NULL。

  参数addrlen是一个值-结果参数:调用者必须初始化addrlen,使其包含addr结构体的大小(以字节为单位);当函数返回时,该值将包含通信对端地址的实际大小。

  如果提供的缓冲区太小,返回的地址将会被截断;在这种情况下,addrlen将会比其初始值还大。

  如果队列中没有连接请求,那么监听套结字没有设置为非阻塞(nonblocking),那么accept函数将会阻塞进程,直到有连接请求到来。如果监听套结字设置为非阻塞,并且请求队列中没有连接请求,那么accept()函数返回错误码EAGAIN或者EWOULDBLOCK。

  如果想要在有连接请求到来时受到提醒,你可以使用select或者poll。当有请求到来时,你将会收到一个可读的事件,并且通过accept接受连接请求,得到连接套结字。当然你也可以设置套结字当有活动发生时发送SIGIO信号,你可以通过socket(6)获得更多相应细节。

  如果flags为0,accept4等价与accept。flags可以通过或运算连接以下值以获得函数的不同行为:

  SOCK_NONBLOCK  设置新创建的连接套结字为NON_BLOCK.

  SOCK_CLOEXEC  设置新创建的套结字close-on-exec(FD_CLOEXEC)

返回值

  成功执行返回新创建的连接套结字的文件描述符,出错返回-1,并且相应设置errno。

以上是关于man 2 accept的主要内容,如果未能解决你的问题,请参考以下文章

Python 向 Postman 请求代码片段

[欧拉回路] poj 1300 Door Man

curl命令行参数及使用

学习小片段——springboot 错误处理

VSCode自定义代码片段2——.vue文件的模板

Linux man命令的使用方法