《千万不要只告诉我是“队列里的最大个数”!》我的理解,看看对不对:我的server里只能accept一个client,listen(x,5)后
如果这时有3个client连接过来,则只有一个被accept,其他2个等在队列中,而这三个connect都返回成功,直到队列中达到5个才connect失败。我的问题:
因为我的程序写成listen(x,0),他还是能有两个connect成功,一个被accept,另一个等在队列(和listen(x,1)效果一样)。所以我认为所有的连接总是先到队列,然后被accept,可见listen(x,0)是没有意义的,所以系统还是当作listen(x,1)来处理。
看看我的理解是否正确?
如果这时有3个client连接过来,则只有一个被accept,其他2个等在队列中,而这三个connect都返回成功,直到队列中达到5个才connect失败。我的问题:
因为我的程序写成listen(x,0),他还是能有两个connect成功,一个被accept,另一个等在队列(和listen(x,1)效果一样)。所以我认为所有的连接总是先到队列,然后被accept,可见listen(x,0)是没有意义的,所以系统还是当作listen(x,1)来处理。
看看我的理解是否正确?
也是要等到accept才成功啊!其实accept会给这边发数据的。
对于TCP的listen 第二个参数,Backlog(积压值)通常伯克利socket中,0 =<backlog<= 5;
对于TCP,通常建立连接时,会有三次握手或4次握手的过程,若已完成了建立连接的握手过程,且
还没有被应用层(应用程序)所接受,则这个连接置于Backlog队列中。
当达到Backlog队列以满,些时,client的连接请求会返回超时的错误。