1. intlisten(int sockfd, int backlog)
listen函数仅会被TCP服务器端调用,主要完成两件事情1).当socket函数创建一个套接字时,它被假设为主动套接字,既是将调用connect函数发起连接的客户套接字,而listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应该接受指向该套接字的连接请求。2)listen函数的第二个参数规定了内核应该为相应套接字排队最大连接个数。
参数backlog:进程处理一个一个连接请求的时候,可能还存在其它的连接请求。因为TCP连接是一个过程,所以可能存在一种半连接的状态,有时由于同时尝试连接的用户过多,使得服务器进程无法快速地完成连接请求。如果这个情况出现了,服务器进程希望内核如何处理呢?内核会在自己的进程空间里维护一个队列以跟踪这些完成的连接但服务器进程还没有接手处理或正在进行的连接,这样的一个队列内核不可能让其任意大,所以必须有一个大小的上限。这个backlog告诉内核使用这个数值作为上限。
简单地说,当一个client与服务器连接的时候,都知道tcp会经过三次握手,这需要一个过程,这期间又来了一个请求也想与服务器建立连接,但是上一个还没有处理完,没办法,排队去吧,当上一个处理完了,再处理下一个,这个参数就是指定了这个队伍的最大长度。