现象

[2020-07-16 01:50:18.943][E] create socket error, reason: Too many open files
[2020-07-16 01:50:18.943][E] capture_get_ip [534] socket error

分析
ps查看对应的进程,查看进程编号是1613

cd /proc/1613
sudo ls fd
0     134  192  25   307  365  422  480  538  596  653  710  769  826  884  941
1     135  193  250  308  366  423  481  539  597  654  711  77   827  885  942
10    136  194  251  309  367  424  482  54   598  655  712  770  828  886  943
100   137  195  252  31   368  425  483  540  599  656  713  771  829  887  944
1000  138  196  253  310  369  426  484  541  6    657  714  772  83   888  945
1001  139  197  254  311  37   427  485  542  60   658  715  773  830  889  946
1002  14   198  255  312  370  428  486  543  600  659  716  774  831  89   947
1003  140  199  256  313  371  429  487  544  601  66   717  775  832  890  948
1004  141  2    257  314  372  43   488  545  602  660  718  776  833  891  949
1005  142  20   258  315  373  430  489  546  603  661  719  777  834  892  95
1006  143  200  259  316  374  431  49   547  604  662  72   778  835  893  950
1007  144  201  26   317  375  432  490  548  605  663  720  779  836  894  951
1008  145  202  260  318  376  433  491  549  606  664  721  78   837  895  952
1009  146  203  261  319  377  434  492  55   607  665  722  780  838  896  953
101   147  204  262  32   378  435  493  550  608  666  723  781  839  897  954
1010  148  205  263  320  379  436  494  551  609  667  724  782  84   898  955
1011  149  206  264  321  38   437  495  552  61   668  725  783  840  899  956
1012  15   207  265  322  380  438  496  553  610  669  726  784  841  9    957
1013  150  208  266  323  381  439  497  554  611  67   727  785  842  90   958
1014  151  209  267  324  382  44   498  555  612  670  728  786  843  900  959
1015  152  21   268  325  383  440  499  556  613  671  729  787  844  901  96
1016  153  210  269  326  384  441  5    557  614  672  73   788  845  902  960
1017  154  211  27   327  385  442  50   558  615  673  730  789  846  903  961
1018  155  212  270  328  386  443  500  559  616  674  731  79   847  904  962
1019  156  213  271  329  387  444  501  56   617  675  732  790  848  905  963
102   157  214  272  33   388  445  502  560  618  676  733  791  849  906  964
1020  158  215  273  330  389  446  503  561  619  677  734  792  85   907  965
1021  159  216  274  331  39   447  504  562  62   678  735  793  850  908  966
1022  16   217  275  332  390  448  505  563  620  679  736  794  851  909  967
1023  160  218  276  333  391  449  506  564  621  68   737  795  852  91   968
103   161  219  277  334  392  45   507  565  622  680  738  796  853  910  969
104   162  22   278  335  393  450  508  566  623  681  739  797  854  911  97
105   163  220  279  336  394  451  509  567  624  682  74   798  855  912  970
106   164  221  28   337  395  452  51   568  625  683  740  799  856  913  971
107   165  222  280  338  396  453  510  569  626  684  741  8    857  914  972
108   166  223  281  339  397  454  511  57   627  685  742  80   858  915  973
109   167  224  282  34   398  455  512  570  628  686  743  800  859  916  974
11    168  225  283  340  399  456  513  571  629  687  744  801  86   917  975
110   169  226  284  341  4    457  514  572  63   688  745  802  860  918  976
111   17   227  285  342  40   458  515  573  630  689  746  803  861  919  977
112   170  228  286  343  400  459  516  574  631  69   747  804  862  92   978
113   171  229  287  344  401  46   517  575  632  690  748  805  863  920  979
114   172  23   288  345  402  460  518  576  633  691  749  806  864  921  98
115   173  230  289  346  403  461  519  577  634  692  75   807  865  922  980
116   174  231  29   347  404  462  52   578  635  693  750  808  866  923  981
117   175  232  290  348  405  463  520  579  636  694  751  809  867  924  982
118   176  233  291  349  406  464  521  58   637  695  752  81   868  925  983
119   177  234  292  35   407  465  522  580  638  696  753  810  869  926  984
12    178  235  293  350  408  466  523  581  639  697  754  811  87   927  985
120   179  236  294  351  409  467  524  582  64   698  755  812  870  928  986
121   18   237  295  352  41   468  525  583  640  699  756  813  871  929  987
122   180  238  296  353  410  469  526  584  641  7    757  814  872  93   988
123   181  239  297  354  411  47   527  585  642  70   758  815  873  930  989
124   182  24   298  355  412  470  528  586  643  700  759  816  874  931  99
125   183  240  299  356  413  471  529  587  644  701  76   817  875  932  990
126   184  241  3    357  414  472  53   588  645  702  760  818  876  933  991
127   185  242  30   358  415  473  530  589  646  703  761  819  877  934  992
128   186  243  300  359  416  474  531  59   647  704  762  82   878  935  993
129   187  244  301  36   417  475  532  590  648  705  763  820  879  936  994
13    188  245  302  360  418  476  533  591  649  706  764  821  88   937  995
130   189  246  303  361  419  477  534  592  65   707  765  822  880  938  996
131   19   247  304  362  42   478  535  593  650  708  766  823  881  939  997
132   190  248  305  363  420  479  536  594  651  709  767  824  882  94   998
133   191  249  306  364  421  48   537  595  652  71   768  825  883  940  999

fd目录下有1024个打开的文件描述符

lw@B46:/proc/1613$ sudo ls fd | wc -l
1024

如下可知都是socket打开的

lw@B46:/proc/1613$ sudo ls -all fd
total 0
dr-x------ 2 root root  0 Jul 15 18:56 .
dr-xr-xr-x 9 root rock  0 Jul 15 12:00 ..
lrwx------ 1 root root 64 Jul 15 18:57 0 -> /dev/ttyFIQ0
lrwx------ 1 root root 64 Jul 15 18:57 1 -> /dev/ttyFIQ0
lrwx------ 1 root root 64 Jul 15 18:57 10 -> 'socket:[13883]'
lrwx------ 1 root root 64 Jul 15 18:57 100 -> 'socket:[14062]'
lrwx------ 1 root root 64 Jul 15 18:57 1000 -> 'socket:[16283]'
lrwx------ 1 root root 64 Jul 15 18:57 1001 -> 'socket:[16285]'
lrwx------ 1 root root 64 Jul 15 18:57 1002 -> 'socket:[19205]'
lrwx------ 1 root root 64 Jul 15 18:57 1003 -> 'socket:[16288]'

代码:sockfd在打开后没有关闭close(sockfd)

static int capture_get_ip(char *ip_addr, int ip_addr_len)
{int ret = -1;int sockfd;struct sockaddr_in sin;struct ifreq ifr;sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (sockfd < 0) {LOG_ERROR("socket error");return ret;}strncpy(ifr.ifr_name, (char *)"wlan0", IFNAMSIZ);//Interface nameif (0 == ioctl(sockfd, SIOCGIFADDR, &ifr)){//SIOCGIFADDR 获取interface addressmemcpy(&sin, &ifr.ifr_addr, sizeof(ifr.ifr_addr));if (strlen(inet_ntoa(sin.sin_addr)) < (uint32_t)ip_addr_len){memcpy(ip_addr, inet_ntoa(sin.sin_addr), strlen(inet_ntoa(sin.sin_addr)));LOG_INFO("ip_addr: %s", ip_addr);ret = 0;}else{LOG_ERROR("invalid ip_addr_len: %d", strlen(inet_ntoa(sin.sin_addr)));}}else{LOG_ERROR("ioctl fail: %s", strerror(errno));}return ret;
}

总结:文件描述符默认最多是1024个,在函数capture_get_ip中忘记关闭文件描述符,导致errno:Too many open files。

为什么会打开了1024个?
网络环境不好时,会断开重连。然后会调用该函数获取1次IP,导致文件描述符打开的越来越多,同时也导致了其他函数如fopen也调用失败。

socket函数返回Too many open files相关推荐

  1. linux c之解决使用socket函数返回为0的问题

    1.问题: 在 linux 平台下 写socket,实现简单的tcp通信,服务端第一次调用 socket函数返回 0 2.找原因: 我的代码是这样写的 if ((server_sockfd = soc ...

  2. socket函数返回值分析

    服务端: 1 WSAStartup(版本,本机的最高版本) WSAStartup函数的第一个参数是加载WinSock库的版本,WSAStartup函数的第二个参数中设置使用的WinSock库的版本,当 ...

  3. C语言 socket listen()函数(socket()函数创建的socket(套接字描述符)默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求)

    摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被 ...

  4. Linux Socket函数手册(二)

    1) int accept(int s,struct sockaddr * addr,int * addrlen); 函数说明 accept()用来接受参数s的socket连线.参数s的socket必 ...

  5. socket编程:socket()函数详解

    文章目录 1. 什么是socket? 1.1 意义 1.2 本质 1.3 应用 1.4 结论 2. socket() 函数参数介绍 2.1 参数1:int af 2.2 参数2:int type 2. ...

  6. 常用socket函数详解

    常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...

  7. windows下socket编程GetLastError()函数返回结果与对照表-转

    原文地址:http://blog.sina.com.cn/s/blog_4880c4bb0100b6a5.html WSAGetLastError()函数返回结果与对照表: Windows Socke ...

  8. linux select函数返回值,socket中的select函数使用

    socket select()函数用于定时检查以创建的socket句柄的状态,以确定设定的socket句柄当前是否可写或有数据可读. select函数提供了一种方法,使得程序在操作socket时(如r ...

  9. Linux 下socket编程 connect()函数返回-1(error:Connection refused)

    一.背景 系统:CentOS7 64位 物理机 IP:192.168.2.199/24 使用端口:9999 二.问题描述 在tty1上运行服务器程序,在tty2上运行客户端程序 若连接成功,则服务器程 ...

最新文章

  1. 24CSS3中的动画
  2. input自适应_深度残差网络+自适应参数化ReLU(调参记录18)Cifar10~94.28%
  3. RabbitMQ的5种队列_简单队列_入门试炼_第4篇
  4. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(10/E) - 特殊指令格式(AVX AVX-512)
  5. 并行算法设计与性能优化_MySQL高性能优化规范建议,从设计,命名,开发等一条线的建议...
  6. centos7.2 ftp连接问题
  7. 一纬度横直线等于多公里_高中物理必修一、必修二知识点提纲,暑期预习必备...
  8. android sdk下载慢的解决方法
  9. 大文件下载插件webupload插件
  10. php session销毁方法,PHP session变量的销毁
  11. astrolog php,如何在苹果MAC上使用Astrolog32 zet9等占星软件
  12. 严蔚敏《数据结构》 迪杰斯特拉算法
  13. html 图片比例 js,JavaScript,等比例缩放图片的函数
  14. android tv tts,android触摸语音事件
  15. 数仓建模—实时数仓架构发展史
  16. Unity 屏幕中显示区域截图
  17. CentOS 7 安装 Mysql 8.0 教程
  18. 每周分享第 29 期
  19. SpringBoot启动图案大全
  20. HashMap 和 Array 有什么区别?

热门文章

  1. PS基础教程[6]如何快速制作一寸照片
  2. Codeforces 985A. Chess Placing(1ni)(水题)(div.2)
  3. 微信公众号网页 H5 video 标签自动播放
  4. 如何用matlab编写分段函数_matlab 如何写分段函数
  5. IDM短信发送接口设计说明
  6. linux刻录光盘空间不足,Linux下的光盘刻录技巧
  7. 学习《python模拟测试机器人》笔记2
  8. css如何使文字抖动,CSS美化:实现抖音彩色文字抖动效果
  9. 基础阶段(三)MDP核心——贝尔曼方程
  10. android为什么会用流量,手机流量为什么会偷跑?