免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: flw
打印 上一主题 下一主题

Linux Kernel 2.6,listen(5),永不 accept,到底能建立成功多少个连接? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
21 [报告]
发表于 2008-09-02 18:02 |只看该作者
原帖由 flw 于 2008-9-2 17:56 发表
哦,我知道了。分开在两台机器上就看得很清楚了。
server 端是 6 个,多余的应该是清除了吧(timeout?)。
客户端一直在涨。



哪里有多余的?
我觉得第六个就是. 没插入到队列里. 处理未受管理的状态. 所以才会出现6个. 其他的都是处于SYN_RECV状态.
就是服务器没有向客户端发SYN(因为它的队列已经满了). 但客户端一直尝试创建连接. 打印错误码看看呢.

论坛徽章:
0
22 [报告]
发表于 2008-09-02 18:02 |只看该作者
这个试验不是要创建连接数么?

本机的确没有tcp的3次握手,貌似连局域网也会存在点小问题的。

连接个数的话应该是和linux所打开的文件个数有关。

listen的话,我以为是同时只能有5个连接,多与的就等待了?好像不对哦。。。

[ 本帖最后由 benbenr 于 2008-9-2 18:04 编辑 ]

论坛徽章:
0
23 [报告]
发表于 2008-09-02 18:04 |只看该作者
不对。listen本来就是等待连接的队列。超过这个就异常了呀。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
24 [报告]
发表于 2008-09-02 18:04 |只看该作者
原帖由 flw2 于 2008-9-2 17:59 发表
flw能否有个C的,我看不懂,特别是第一个,我可以看看代码是怎么回事

  1. flw@waker:~$ cat listen.c
  2. # include <stdio.h>
  3. # include <sys/types.h>
  4. # include <sys/socket.h>
  5. # include <netinet/in.h>

  6. int main( int argc, char *argv[] )
  7. {
  8.     int backlog;
  9.     int sock;
  10.     struct sockaddr_in addr;
  11.     int ret;

  12.     if ( argc != 2 ){
  13.         printf( "Usage: %s <backlog>\n", argv[0] );
  14.         printf( "use 5 for backlog\n" );
  15.         backlog = 5;
  16.     }
  17.     else{
  18.         backlog = atoi( argv[1] );
  19.     }

  20.     sock = socket( PF_INET, SOCK_STREAM, IPPROTO_TCP );
  21.     if ( sock == -1 ){
  22.         perror( "socket" );
  23.         return -1;
  24.     }

  25.     addr.sin_family = AF_INET;
  26.     addr.sin_port = htons( 9999 );
  27.     addr.sin_addr.s_addr = INADDR_ANY;
  28.     ret = bind( sock, (struct sockaddr *)&addr, sizeof(addr) );
  29.     if ( ret == -1 ){
  30.         perror( "bind" );
  31.         return -1;
  32.     }

  33.     ret = listen( sock, backlog );
  34.     if ( ret == -1 ){
  35.         perror( "listen" );
  36.         return -1;
  37.     }

  38.     while(1){
  39.         sleep(1);
  40.     }
  41. }
  42. flw@waker:~$
复制代码

论坛徽章:
0
25 [报告]
发表于 2008-09-02 18:05 |只看该作者
server端一直是只有6个吧?

涨的是client端一直不停尝试连接的

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
26 [报告]
发表于 2008-09-02 18:07 |只看该作者
原帖由 chenzhanyiczy 于 2008-9-2 17:31 发表
只有5个吧,listen是建立连接,只是没有accpet

不会只有5个的

Figure 4.10. Actual number of queued connections for values of backlog.

123.JPG (21.84 KB, 下载次数: 76)

123.JPG

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
27 [报告]
发表于 2008-09-02 18:15 |只看该作者

回复 #26 yecheng_110 的帖子

哦..这就是为什么一开始上来 是 8个了.

论坛徽章:
0
28 [报告]
发表于 2008-09-02 18:16 |只看该作者
刚刚测试了一下, 在server端连接状态为ESTABLISHED的只有五个, 其余的都为SYN_RECV状态.

论坛徽章:
0
29 [报告]
发表于 2008-09-02 18:20 |只看该作者
我这里得到的是47
但是不知道netstat 看到的连接ESTABLISHED的个数到底什么意思
而且很多connect最后都是超时返回失败的

回家了先

论坛徽章:
0
30 [报告]
发表于 2008-09-02 18:21 |只看该作者
原帖由 scutan 于 2008-9-2 18:16 发表
刚刚测试了一下, 在server端连接状态为ESTABLISHED的只有五个, 其余的都为SYN_RECV状态.


而且在过了一段时间之后所有为SYN_RECV状态的连接都会断掉. 即是说如果不将已经建立了三次连接的用accept取走的话, 那么处于SYN_RECV状态的连接会在一段时间之后消失.

我想可能是因为不断地有连接消失, 所以才能够不断地去连接它, 而后面连接数增长的时间较慢, 是因为SYN_RECV状态的连接的取消需要一段时间.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP