服务器在调用socket、bind函数之后就会调用listen来监听这个socket,如果客户端这时调用connect发出连接请求,服务器端就会接收到这个请求。
无论tcp或者udp都会用到。
int listen(int sockfd,int backlog);
第一个参数就是要监听的socket描述符,第二个参数为相应的socket可以排队的最大连接数,换句话说就是,未经处理的连接请求队列可以容纳的最大数目。socket函数创建的socket默认是一个主动类型,listen函数将socket变为被动类型,等待客户的连接请求。
backlog具体是什么意思呢?每一个连入请求都要进入一个连入请求队列,等待listen 的程序调用accept()(accept()函数下面有介绍)函数来接受这个连接。当系统还没有调用accept()函数的时候,如果有很多连接,那么本地能够等待的最大数目就是backlog 的数值。你可以将其设成5 到10 之间的数值(推荐)。像上面的所有函数一样, listen()如果返回 –1 ,那么说明在listen()的执行过程中发生了错误。全局变量errno 中存储了错误代码。