当前位置:  技术问答>linux和unix

close掉socket后,在accept了1024次后,出现打开文件最大限制1024的问题

    来源: 互联网  发布时间:2016-02-17

    本文导语:  我的一个服务器程序在循环accept来自客户端的连接, 建立连接,处理完该处理的事情后,close掉该socket, 当accept到1024次后,无法再accept连接了。 通过ulimit -n,sysctl来修改最大限制也意义不大,这是服务器啊,一...

我的一个服务器程序在循环accept来自客户端的连接,

建立连接,处理完该处理的事情后,close掉该socket,

当accept到1024次后,无法再accept连接了。

通过ulimit -n,sysctl来修改最大限制也意义不大,这是服务器啊,一直不关机,总会有一天打开到最大限制的

我觉得可能还是close的问题,但不知道原因在哪里?

|
你是根据什么条件close()的呢
是server主动关闭还是客户端关闭你才关闭
如果是server主动关闭,这个tcp connection将处于TIME_AWAIT状态,在这个时间内不会马上close(),所以还占用文件描述符位置
建议你netstat -an | grep port 看看connection 的状态

|
还是怀疑没有正确close

|
 client_sock = accept( server_sock,...);
    ...
    close(client_sock); 
...中有没有异常的continue,而没有close

|
服务器一般不主动close掉连接,而是由client发起close,服务器响应close。
除非client出现错误或问题(包括client发起close)。
这是写服务器的基本原则。

|
这样做不好,兄弟
先用select看是否有可读取数据,若>0则再运行accept

|
进入/proc/pid/fd内,ls -l看看都是那些没关闭就是了。(pid问进程号)

|
gdb一下,看看是否有调close(),估计没有运行到close()就跳出循环

|
大量的socket连接建议用epoll! 简单适用

|
close后看看端口状态.确认下客户端是不是也close了?

|
服务器的ram有多大?还有好像linux默认最大连接数是1024,要彻底修改连接数,得重新编译内核/include/linux/fs.h

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux打开的文件描述符必须手动close吗
  • 为什么close设备后,再打开还是错误呢?
  • java命名空间java.io类printstream的类成员方法: close定义及介绍
  • close(socket)之后,客户端没有收到FD_CLOSE
  • C++ I/O 成员 close():关闭一个流
  • ::close(STDOUT) 这是什么用法 ???
  • java命名空间java.util.logging类consolehandler的类成员方法: close定义及介绍
  • liunx下面包含socket头文件了,close时提示尚未声明???
  • java命名空间java.io类chararraywriter的类成员方法: close定义及介绍
  • Linux socket close后重新启动server的问题
  • java命名空间java.io类outputstream的类成员方法: close定义及介绍
  • 为何我close了 accept不立即返回
  • java命名空间javax.swing类progressmonitorinputstream的类成员方法: close定义及介绍
  • Linux 中的printf、open、close
  • java命名空间java.io类objectinputstream的类成员方法: close定义及介绍
  • 多线程close() socket套接字的问题
  • java命名空间java.io类objectoutputstream的类成员方法: close定义及介绍
  • linux socket程序,出现closed by peer问题
  • java命名空间java.io类inputstream的类成员方法: close定义及介绍
  • [求助]关于SOCKET编程中close函数阻塞的问题。
  • java命名空间java.io类stringreader的类成员方法: close定义及介绍
  • MAXDATASIZE read close 的声明在哪个头文件里头???
  • java命名空间java.io类printwriter的类成员方法: close定义及介绍
  • 在用man close时出现错误


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3