socket函数返回Too many open files
现象
[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相关推荐
- linux c之解决使用socket函数返回为0的问题
1.问题: 在 linux 平台下 写socket,实现简单的tcp通信,服务端第一次调用 socket函数返回 0 2.找原因: 我的代码是这样写的 if ((server_sockfd = soc ...
- socket函数返回值分析
服务端: 1 WSAStartup(版本,本机的最高版本) WSAStartup函数的第一个参数是加载WinSock库的版本,WSAStartup函数的第二个参数中设置使用的WinSock库的版本,当 ...
- C语言 socket listen()函数(socket()函数创建的socket(套接字描述符)默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求)
摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被 ...
- Linux Socket函数手册(二)
1) int accept(int s,struct sockaddr * addr,int * addrlen); 函数说明 accept()用来接受参数s的socket连线.参数s的socket必 ...
- 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. ...
- 常用socket函数详解
常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...
- windows下socket编程GetLastError()函数返回结果与对照表-转
原文地址:http://blog.sina.com.cn/s/blog_4880c4bb0100b6a5.html WSAGetLastError()函数返回结果与对照表: Windows Socke ...
- linux select函数返回值,socket中的select函数使用
socket select()函数用于定时检查以创建的socket句柄的状态,以确定设定的socket句柄当前是否可写或有数据可读. select函数提供了一种方法,使得程序在操作socket时(如r ...
- Linux 下socket编程 connect()函数返回-1(error:Connection refused)
一.背景 系统:CentOS7 64位 物理机 IP:192.168.2.199/24 使用端口:9999 二.问题描述 在tty1上运行服务器程序,在tty2上运行客户端程序 若连接成功,则服务器程 ...
最新文章
- 24CSS3中的动画
- input自适应_深度残差网络+自适应参数化ReLU(调参记录18)Cifar10~94.28%
- RabbitMQ的5种队列_简单队列_入门试炼_第4篇
- Intel 64/x86_64/IA-32/x86处理器 - 指令格式(10/E) - 特殊指令格式(AVX AVX-512)
- 并行算法设计与性能优化_MySQL高性能优化规范建议,从设计,命名,开发等一条线的建议...
- centos7.2 ftp连接问题
- 一纬度横直线等于多公里_高中物理必修一、必修二知识点提纲,暑期预习必备...
- android sdk下载慢的解决方法
- 大文件下载插件webupload插件
- php session销毁方法,PHP session变量的销毁
- astrolog php,如何在苹果MAC上使用Astrolog32 zet9等占星软件
- 严蔚敏《数据结构》 迪杰斯特拉算法
- html 图片比例 js,JavaScript,等比例缩放图片的函数
- android tv tts,android触摸语音事件
- 数仓建模—实时数仓架构发展史
- Unity 屏幕中显示区域截图
- CentOS 7 安装 Mysql 8.0 教程
- 每周分享第 29 期
- SpringBoot启动图案大全
- HashMap 和 Array 有什么区别?
热门文章
- PS基础教程[6]如何快速制作一寸照片
- Codeforces 985A. Chess Placing(1ni)(水题)(div.2)
- 微信公众号网页 H5 video 标签自动播放
- 如何用matlab编写分段函数_matlab 如何写分段函数
- IDM短信发送接口设计说明
- linux刻录光盘空间不足,Linux下的光盘刻录技巧
- 学习《python模拟测试机器人》笔记2
- css如何使文字抖动,CSS美化:实现抖音彩色文字抖动效果
- 基础阶段(三)MDP核心——贝尔曼方程
- android为什么会用流量,手机流量为什么会偷跑?