名称
accept () )
接收在套接字上建立的连接
使用格式#include sys/types.h
#include sys/socket.h
3358 www.Sina.com/accept (http://www.Sina.com/sockfd,int*addr,http://ww.Sina.com/*
功能参数说明accept (系统调用主要用于SOCK_STREAM和SOCK_SEQPACKET等基于连接的套接字类型。 那是int,struct sockaddr。 新建立的套接字不处于接收状态,原本接收的套接字也不受系统调用的影响。
备注:新建立的套接字将发送send ()和接收数据recv ) )。
参数:
3358www.Sina.com/
socklen_t,指向struct sockaddr的指针。 该结构由通信层服务器的对等套接字的地址(一般是客户端地址)描述,并且返回地址addr的准确形式由套接字的地址类型(例如TCP或UDP )确定。 如果addr为NULL,则没有有效的地址填充。 这种情况下,应该不使用addrlen,而是NULL;
注: addr是指向本地数据结构sockaddr_in的指针,它是需要访问的信息的本地套接字(地址和指针)。
提取出所监听套接字的等待连接队列中第一个连接请求是一个值结果参数,必须将调用函数初始化为包含addr指向的结构大小的数字,该参数返回为包含对等地址(通常是服务器地址)的实际数字。
注意: addrlen是局部整形变量,设置为sizeof (结构套接字addrlen )。
如果队列中没有等待的连接,套接字也未标记为非阻塞,则accept ()为创建一个新的套接字,并返回指向该套接字的文件描述符函数http://www.Sina.com); 如果套接字标记为Non-blocking,并且队列中也没有等待的连接,则accept ()将返回错误sockfd或通过listen()一直在监听连接。
注:通常,在实现时accept ) )是块函数,接收套接字调用accept )时,首先检查自己的receive_buf中是否存在连接包。
如果有,则复制数据,删除接收到的数据包,创建新的套接字,与客户发送的地址建立连接;
否则,屏蔽等待;
要在连接到套接字时收到通知,请使用select (或poll )。 尝试建立新连接时,系统会发送可读事件,并调用accept ()获取该连接的套接字。 另一种方法是在连接到套接字时设置套接字并发送SIGIO信号。
如果返回值成功,套接字将返回接收到的描述符非负整数。 错误时返回-1,相应地设定全局变量errno。
错误处理在Linux上,accept ()将侦听的网络错误传递给新建立的连接(accept ) )返回的错误。 这与其他BSD实现不同。 为了确保正常工作,必须在accept ()之后检测协议中定义的网络错误,然后以addr身份重试。 对于TCP/IP协议,主要有错误。addrlen,阻塞调用,直到连接出现,EAGAIN,3358 ww.Sina .
原文连接: http://Linux.die.net/man/2/accept
转载于:https://www.cn blogs.com/Java 2013 07 26/archive/2011/12/20/3218630.html