CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

UNIX SCO 5.0.5 是否有tcp端口侦听个数限制?

楼主universes(及时揭帖是一种美德 | CSDN也这么黑)2006-03-08 09:26:56 在 Linux/Unix社区 / 程序开发区 提问

请问一下,UNIX是否有tcp端口侦听数的限制?如果有,上限是多少?如何改大?  
   
  问题是这样:我们程序打开了40多个tcp端口侦听的时候没有问题,但增加到90多个tcp侦听的时候出了问题。现在怀疑有可能是UNIX有tcp端口侦听个数的限制,从而造成了问题。当然,也有可能是我们程序其它地方出现了问题。  
   
  所以,请哪位清楚的大虾指点一下!多谢了!  
  问题点数:50、回复次数:36Top

1 楼fierygnu(va_list)回复于 2006-03-08 09:58:50 得分 0

出问题是什么现象?哪个函数返回错误?errno是多少?。。。Top

2 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-08 10:45:14 得分 0

fierygnu(va_list)   :  
  Thanks!  
  不好意思,这个我也不清楚。  
  因为是客户那边使用我们的程序出了问题,由我们的技术支持反映过来的。  
   
  我刚刚测试了一下,打开了120多个端口,也没什么问题。  
  只是现在的测试还没有使用这些端口,所以也还不确定如果有这么多个连接会不会出现问题。Top

3 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-08 11:06:22 得分 0

刚刚测试了一下,好像在8000多的端口打开都没问题,50000以上的端口就都打不开:(Top

4 楼fierygnu(va_list)回复于 2006-03-08 14:43:17 得分 0

socket数目有限制是肯定的,端口数就不清楚了。检查一下代码吧。Top

5 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-09 14:52:22 得分 0

多谢fierygnu(va_list)   !  
   
  socket数目有限制肯定会出现一点问题,但现在技术支持反映过来的是:  
  在同样数目的连接下,如果采用端口复用,只侦听少量端口,就不会有问题;而如果每个连接数都打开一个端口就会有问题。  
  这样似乎和socket的连接数目没有关系,而和打开的侦听端口的个数有关系。  
  困惑ing。。。。  
   
  自己也正在网上查资料,找到答案了也会来报一下的。如果哪位大虾知道这是什么问题,也请不吝赐教!多谢!Top

6 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-09 14:59:50 得分 0

网上找到一篇文章,讲的是在windows2000下侦听端口的限制为64个,不知道在unix和linux上是否也有这样的限制?各是多少?  
  另外还有一个困惑,如果真有打开端口或socket连接数的的限制,那么系统本身就侦听了很多端口或有很多socket连接,是否会减少其它应用程序的打开端口数或socket连接数?  
  这些限制是由inetd来统一管理的吗?  
   
  找到的文章如下:  
   
  windows2000下select()同时监听的Socket数目是不是限制为64了?  
  hnhawk   ()           2003-12-05   10:46:10   在   .NET技术   /   VC.NET   提问  
  例如:  
  使用windows2000下select()同时监听65个Socket,当所有端口均活动时,怎么只能感知到64个,最后一个不能感知,怎么回事?  
   
   
  问题点数:0、回复次数:1    
   
  1楼     poweruser       (Loading......)       回复于   2003-12-05   10:58:00     得分   0    
  默认是64,可以自己修改  
   
  The       variable       FD_SETSIZE       determines       the       maximum       number       of       descriptors       in       a       set.       (The       default       value       of       FD_SETSIZE       is       64,       which       can       be       modified       by       defining       FD_SETSIZE       to       another       value       before       including       Winsock2.h.)Top

7 楼fierygnu(va_list)回复于 2006-03-09 15:00:09 得分 0

出问题时用trace跟踪一下看看是什么地方的问题。Top

8 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 10:09:28 得分 0

终于找到问题所在了.  
  配置了90路的时候还没有问题,配置了91路的时候就打出了下面这些内容:  
   
  inetd:   resource   /etc/auth/system/authorize   could   not   be   allocated   due    
   
  to:   can   not   open    
  inetd:   resource:   System   Defualts   database   could   not   be   allocated   due    
   
  to:   can   not   be   read  
   
   
  而且,此时普通的telnet连接上去也会打出这句话,也登陆不上,而且连一路也登陆不上.  
   
  另外,前面提到的50000就打不开其实是假象,而是由于上面所提到的这个原因造成的.  
   
  我自己也到网上查查哪里会打出这些错误内容,也请了解这个问题的大虾相助!多谢了!Top

9 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 11:15:38 得分 0

郁闷,用的是正版SCO,但是去提问的时候他说要购买他的服务他才肯回答,2000一年,最多问20个问题....  
   
  哎,俺们公司什么时候也这样收费,那就赚翻了......Top

10 楼fierygnu(va_list)回复于 2006-03-22 11:18:04 得分 0

sco就是死狗   :)  
  看看文件系统空间。用strace跟踪一下出问题时的应用。Top

11 楼alaiyeshi(七宝树八宝饭)回复于 2006-03-22 12:08:13 得分 0

这么黑???  
  看来卖服务是真牛,不过我奇怪,弄的客户不喜欢用了,它还怎么赚钱?Top

12 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 12:47:23 得分 0

不好意思,不知道如何使用strace   :(      
  自己找找先找找资料,大虾可以推荐一下吗?谢了!Top

13 楼fierygnu(va_list)回复于 2006-03-22 12:50:30 得分 0

笔误了,sco上是trace。man   trace就可以了。Top

14 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 12:51:55 得分 0

SCO不行了,现在临死前还想打击一把Linux.....Top

15 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 13:03:13 得分 0

对了,trace只是调试程序吧?  
  现在的问题是打开了多个端口以后,连普通的telnet上去都马上直接退下来了.我们的程序和telnet退出时的现象是一样的.而且我们程序在你连接上时还会写日志,但是现在日志里根本就没写任何东西.所以,trace应该是起不了作用啊....  
   
  用netstat命令查看,那些端口都侦听了,包括23telnet端口.可就是奇怪,一个连接不上去,然后打出了上面的错误提示...Top

16 楼fierygnu(va_list)回复于 2006-03-22 13:08:34 得分 0

用trace跟踪你的应用看看为什么退出。Top

17 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 13:18:10 得分 0

这个错误是inetd打出来的,而且现在我用其他手段(在程序的开始处打印信息,写日志),可以确认根本就没有调用我的程序就直接退出了.也就是说问题出在inetd里,还没到调用我的程序的这一步就over了Top

18 楼fierygnu(va_list)回复于 2006-03-22 13:21:06 得分 0

那就trace   -p   <inetd.pid>Top

19 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 13:54:48 得分 0

trace   -p   3593   /etc/inetd   得到的结果是:  
  _sighold   (18)   =   0  
  _sighold   (1)   =   0  
  _sighold   (14)   =   0  
  _fork()   =   0  
  _sigrelse   (18)   =   0  
  _sigrelse   (1)   =   0  
  _sigrelse   (14)   =   0  
  _close   (3)   =   0  
   
  其中   3593是   inetd的进程号Top

20 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 13:59:07 得分 0

正常情况下打印出来的为:  
  _sighold   (18)   =   0  
  _sighold   (1)   =   0  
  _sighold   (14)   =   0  
  _fork()   =   3929  
  _sigrelse   (18)   =   0  
  _sigrelse   (1)   =   0  
  _sigrelse   (14)   =   0  
  _close   (3)   =   0  
   
   
  看了是不是inetd没有fork出子进程?why?Top

21 楼fierygnu(va_list)回复于 2006-03-22 14:05:44 得分 0

用trace   -f   -p   。。。,看看fork的执行情况。  
  Top

22 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 14:11:18 得分 0

加了-f   child  
  发现打开/etc/auth/system/gr_id_map  
  和/etc/gruop文件后都返回了-1,而且can't   find   errnoTop

23 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 14:15:33 得分 0

详细信息如下:  
  #   trace   -p   7159   -f   child   /etc/inetd  
  Process   7159   attached   -   interrupt   to   quit  
  (7159)   _sighold   (18)   =   0  
  (7159)   _sighold   (1)   =   0  
  (7159)   _sighold   (14)   =   0  
  (7191)   --   trace   started   --  
  (7159)   _fork   ()   =   7191  
  (7159)   --   released   --  
  (7191)   _fork   ()   =   0  
  (7191)   _sigrelse   (18)   =   0  
  (7191)   _sigrelse   (1)   =   0  
  (7191)   _sigrelse   (14)   =   0  
  (7191)   _open   ("/etc/default/login",   0x0)   =   -1   (can't   find   errno)  
  (7191)   _getegid   ()   =   3  
  (7191)   __xstat   ()   =   0  
  (7191)   _xstat   (51,   0x8008cdd8,   134511924)   =   0  
  (7191)   __stat32   ("/etc/group",   0x8047d34)   =   0  
  (7191)   __xstat   ()   =   0  
  (7191)   _xstat   (51,   0x8008cde4,   134511808)   =   0  
  (7191)   __stat32   ("/etc/auth/system/gr_id_map",   0x8047cc0)   =   0  
  (7191)   _open   ("/etc/auth/system/gr_id_map",   0x0)   =   -1   (can't   find   errno)  
  (7191)   _open   ("/etc/group",   0x0)   =   -1   (can't   find   errno)  
  (7191)   _geteuid   ()   =   0  
  (7191)   __xstat   ()   =   -1   (can't   find   errno)  
  (7191)   _xstat   (51,   0x805d420,   134511016)   =   -1   (can't   find   errno)  
  (7191)   __stat32   ("/etc/passwd-t",   0x80479a8)   =   -1   (can't   find   errno)  
  (7191)   _open   ("/etc/passwd",   0x0)   =   -1   (can't   find   errno)  
  (7191)   __xstat   ()   =   -1   (can't   find   errno)  
  (7191)   _xstat   (51,   0x805d434,   134511016)   =   -1   (can't   find   errno)  
  (7191)   __stat32   ("/etc/shadow-t",   0x80479a8)   =   -1   (can't   find   errno)  
  (7191)   _open   ("/etc/shadow",   0x0)   =   -1   (can't   find   errno)  
  (7191)   _eaccess   ("/etc/shadow",   0x0)   =   0  
  (7191)   __xstat   ()   =   0  
  (7191)   _xstat   (51,   0x805de68,   134511152)   =   0  
  (7191)   __stat32   ("/etc/auth/system/default",   0x8047a30)   =   0  
  (7191)   __xstat   ()   =   0  
  (7191)   _xstat   (51,   0x8008c48c,   134511152)   =   0  
  (7191)   __stat32   ("/etc/default/login",   0x8047a30)   =   0  
  (7191)   __xstat   ()   =   0  
  (7191)   _xstat   (51,   0x8008c4a0,   134511152)   =   0  
  (7191)   __stat32   ("/etc/default/passwd",   0x8047a30)   =   0  
  (7191)   __xstat   ()   =   -1   (can't   find   errno)  
  (7191)   _xstat   (51,   0x8055b2c,   134510840)   =   -1   (can't   find   errno)  
  (7191)   __stat32   ("/etc/auth/system/default-t",   0x80478f8)   =   -1   (can't   find   errno)  
  (7191)   _open   ("/etc/auth/system/default",   0x0)   =   -1   (can't   find   errno)  
  (7191)   __xstat   ()   =   -1   (can't   find   errno)  
  (7191)   _xstat   (51,   0x8055b2c,   134510408)   =   -1   (can't   find   errno)  
  (7191)   __stat32   ("/etc/auth/system/default-t",   0x8047748)   =   -1   (can't   find   errno)  
  (7191)   _open   ("/etc/auth/system/default",   0x0)   =   -1   (can't   find   errno)  
  (7191)   _open   ("/etc/default/security",   0x0)   =   -1   (can't   find   errno)  
  (7191)   _write   (2,   "inetd:   ",   7)   =   7  
  (7191)   _write   (2,   "resource:   System   Defaults   database   could"..,   80)   =   80  
  (7191)   _write   (2,   "\n",   1)   =   1  
  (7191)   __xstat   ()   =   0  
  (7191)   _xstat   (51,   0x8008cdd8,   134510936)   =   0  
  (7191)   __stat32   ("/etc/group",   0x8047958)   =   0  
  (7191)   __xstat   ()   =   0  
  (7191)   _xstat   (51,   0x8008cde4,   134510820)   =   0  
  (7191)   __stat32   ("/etc/auth/system/gr_id_map",   0x80478e4)   =   0  
  (7191)   _open   ("/etc/auth/system/gr_id_map",   0x0)   =   -1   (can't   find   errno)  
  (7191)   _open   ("/etc/group",   0x0)   =   -1   (can't   find   errno)  
  (7191)   time   (0x0)   =   1143007009  
  (7191)   _time   (0x0)   =   1143007009  
  (7192)   --   trace   started   --  
  (7191)   _fork   ()   =   7192  
  (7191)   --   released   --  
  (7192)   _fork   ()   =   0  
  (7192)   _open   ("/tcb/files/subsys/none",   0x0)   =   -1   (can't   find   errno)  
  (7192)   _execve   ("/etc/auth/dlvr_audit",   0x8047a4c,   0x8047ee4)  
  (7192)   >>>   starting   /etc/auth/dlvr_audit   <<<  
  (7192)   _exit   (1)   =   ?Top

24 楼fierygnu(va_list)回复于 2006-03-22 14:39:23 得分 50

文件描述符超限了?ulimit   -n是多少?或者看看/etc/conf/cf.d/stune?Top

25 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 14:42:22 得分 0

vi   /etc/conf/cf.d/stune   如下:  
  NODE         "scosysv"  
  NSPTTYS   743  
  EVQUEUES                 751  
  EVDEVS     759  
  NUMSP       256  
  NSTREAM   4096  
  NHINODE   1024  
  TTHOG       4096  
  NCLIST     512  
  NSTREVENT               8192  
  NUMTIM     1040  
  NUMTRW     1040  
  SECLUID   0  
  SECSTOPIO               1  
  SECCLEARID             1  
  NOFILES   120Top

26 楼fierygnu(va_list)回复于 2006-03-22 14:54:11 得分 0

NOFILES   120  
  看看inetd打开了多少描述符,是不是超了120个。linux可以用lsof或者直接到/proc去看,sco我就不清楚了。Top

27 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 15:38:24 得分 0

不好意思,刚刚有点其他事情  
   
  我将这个值改到了256,然后再测试,还是有问题。。。。Top

28 楼fierygnu(va_list)回复于 2006-03-22 15:44:38 得分 0

重新连接、重启了吗?  
  cd   /etc/conf/cf.d  
  ./link_unix  
  rebootTop

29 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 16:48:31 得分 0

可以了!  
  谢谢大虾!  
   
  但不知道这是什么道理,大虾可以说明一下,或者给个资料吗?  
  多谢了!Top

30 楼fierygnu(va_list)回复于 2006-03-22 16:56:12 得分 0

inetd使用的文件描述符超限了,所以不能打开新的文件,导致错误。Top

31 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-22 17:11:26 得分 0

大虾加我qq一下好吗?:45335240  
  或者msn:hmilyajiao@hotmail.com  
   
  我对这里提到的文件描述符不是很清楚:侦听的端口需要打开一些文件描述符,那么,当有连接上来是不是又要打开另外一些文件描述符?这些侦听的端口的描述符和已连接的描述符是不是加起来不能超过NOFILES?  
   
  在qq再向你请教吧!多谢领了!Top

32 楼fierygnu(va_list)回复于 2006-03-22 18:17:12 得分 0

我无QQ   :(  
   
  你的理解是对的。  
  Top

33 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-23 08:28:41 得分 0

呵呵,自己再想了一下,有如下理解:  
  因为inetd始终是一个进程,它打开的文件描述符最多也就是NOFILES.而它调用telnet或者我们的程序的时候,是fork出来了子进程,子进程打开的文件描述符的个数就不会算到父进程的个数里面了.所以,我们的程序有超过NOFILES个连接存在的时候是没有问题的,因为这些文件描述符(socket)是由不同的进程打开的.而侦听端口超过NOFILES个就不行了,因为这些文件描述符都是由inetd进程打开的.  
  也就是说,文件描述符的限制是一个进程打开的文件描述符的个数.  
  这样的理解应该对了吧?  
   
  知道拖了这么久没有揭帖不好,但是还希望大虾给一个肯定的回复"是",如果理解不对请指正,多谢了!Top

34 楼fierygnu(va_list)回复于 2006-03-23 09:06:36 得分 0

是。NOFILES是每个进程可以打开的描述符限制。Top

35 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-23 09:12:10 得分 0

多谢大虾!Top

36 楼fierygnu(va_list)回复于 2006-03-23 09:18:56 得分 0

不客气。希望你能从中获取一些解决问题的思路和方法:)Top

相关问题

  • 如何判断串口端口的个数
  • TCP/IP端口问题
  • 并口中对端口输出的控制(如:8个数据端口只要个3输出)
  • TCP/IP 110端口是什么服务
  • 请问PcAnywhere的TCP端口号?急!!!!!!!!!!
  • 关于某TCP/IP端口的作用
  • 绑定在 TCP 端口 1433 上失败。 ??
  • 我的WIN2000怎么有TCP“1030”端口?
  • 如何开启UDP和TCP 53端口
  • 服务器可不可以对同一端口建立一个数据报socket,一个侦听socket。

关键词

  • b2c
  • windows2000
  • 端口
  • sco
  • 连接
  • sigrelse
  • sighold
  • 限制
  • 个数
  • 侦听

得分解答快速导航

  • 帖主:universes
  • fierygnu

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo