《千万不要只告诉我是“队列里的最大个数”!》我的理解,看看对不对:我的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)来处理。
看看我的理解是否正确?

解决方案 »

  1.   

    listen(x,0)它会采用默认的值(V1.1是5,V2.0是20),而不是用0!
      

  2.   

    connect
    也是要等到accept才成功啊!其实accept会给这边发数据的。
      

  3.   

    系统默认值是不同的?我的是win2003
      

  4.   

    <<TCP/IP详解>> 卷1上说,
    对于TCP的listen 第二个参数,Backlog(积压值)通常伯克利socket中,0 =<backlog<= 5;
    对于TCP,通常建立连接时,会有三次握手或4次握手的过程,若已完成了建立连接的握手过程,且
    还没有被应用层(应用程序)所接受,则这个连接置于Backlog队列中。
    当达到Backlog队列以满,些时,client的连接请求会返回超时的错误。
      

  5.   

    backlog可以为0?我认为任何连接,握手完毕后总是先到队列中,然后应用程序再从中拿出,如果为0不是没有意义吗?而且在我的win2003+vs.net2003里,我试验了listen为0,但实际还是可以最多有一个在队列等待。