listen:
在服务器端bind socket的fd之后会call一个listen函数,这个函数有什么作用:
这个函数说明客户端连接请求队列能容纳的连接数,当server一个个的处理连接时候可能会同时又有其他连接请求,TCP链接是个过程,可能存在半链接状态,如果链接太多就会有链接未能及时处理的请求,那么这些个请求就被放到一个队列中去,等待处理。那这个队列不能无限大所以用listen说明这个准备好的队列可以最多容纳多少个连接数,当然这个数值的设定在系统设置的范围内,一般小于30。当一次性爆发100个请求,而listen函数设置为5那么也就只有5个请求可能保持在队列里等候处理。
accept:
这个函数会把上面listen过的fd作为参数,这个函数在内核中首先创建一个新的struct socket然后复制fd中的部分信息,这时候socket里面已经有刚刚listen的队列了,首先先检测socket的监听状态,然后检测请求队列是不是NULL,如果不是NULL,取出第一个处理,如果为NULL那就睡觉休息直到有请求进来把它唤醒。他主要就看守请求队列。