码迷,mamicode.com
首页 > 其他好文 > 详细

man 2 accept

时间:2016-03-17 09:30:57      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

名称

  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

标签:

原文地址:http://www.cnblogs.com/cq-shihao/p/5285975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!