码迷,mamicode.com
首页 > 其他好文 > 详细

上班的第五百一十九天

时间:2015-07-03 22:09:05      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:

    今天验证了两个问题。

    第一,backlog是不是填多少都生效

    第二,主程说登陆不上的问题是因为listen的队列满了,导致新连接连接不上,这个说法是否成立。

    针对第一个问题,我翻阅了一些资料,得知这些是由操作系统底层决定的,对此,我在macbook和windows7上面都做了如下的实验。

    服务器端:创建socket->填写sockaddr_in结构体->绑定监听地址和端口号->listen(socket, SOMAXCONN)->while(true){ ;}->end

    客户端:while(true){创建socket->connect服务器}->end

    在客户端中,每connect一次都打印一次计数变量(count++),都跑起来之后,发现在mac下connect到了128就堵塞了,而在windows7下面是到了200才堵塞。所以backlog并不是填多少都有效,是有限的,超过系统的上限,就会按照系统的上限来设置。

    针对第二个问题,我把connect的错误打印出来了,错误10061。主程说的可是10036喔,还斩钉截铁的。然后我就很开心地去叼他,说我测出来队列满了的错误是10061,并不是10036。接着他问我,10061是什么鬼,我告诉他是”服务器拒绝服务“。他就说,他记错了,是10061!

    什么鬼!还好我自己实践了一遍,不然按照他说的去找10036,都不知道找到猴年马月。

    接着就能找到问题点了,队列满了,排除了SYN洪水攻击之外就是因为没有accept,正常来说是不会出现这个问题的。除非,负责accept那条线程挂掉了,才会这样子。好的,明天就去找找,看是否有可能会使那条线程挂了。


上班的第五百一十九天

标签:

原文地址:http://my.oschina.net/chrisforbt/blog/474343

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!