首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux不允许创建足够的套接字,但使用的套接字不多

问Linux不允许创建足够的套接字,但使用的套接字不多
EN

Stack Overflow用户
提问于 2021-09-22 17:49:54
回答 1查看 54关注 0票数 0

我的C++应用程序创建了64-128个UDP套接字。

它使用以下代码创建套接字:

代码语言:javascript
复制
int sock = socket(AF_INET, SOCK_DGRAM, 0);
assert(sock != -1, strerror(errno));

const u_int yes = 1;
int result = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));
printf("sock=%i result=%i errno=%i\n", sock, result, errno);
if(result != 0)
{
    FATAL(strerror(errno));
}

但是,目前它只创建两个套接字,因为setsockopt()在第三个请求中返回-1:

代码语言:javascript
复制
sock=1023 result=-1 errno=0

(stderror(errno)刚刚说success)

我很困惑,因为当我运行ss时,看起来没有多少套接字在使用:

代码语言:javascript
复制
ss -s
Total: 238
TCP:   85 (estab 16, closed 40, orphaned 0, timewait 37)

Transport Total     IP        IPv6
RAW       2         1         1        
UDP       24        17        7        
TCP       45        30        15       
INET      71        48        23       
FRAG      0         0         0 

我的理解是你可能有1023个插座。所以上面的意思是我应该能够创建64-128?

这里有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-22 18:15:18

对打开的套接字数量没有限制,但对打开的文件描述符的数量有更一般的限制。它在fd=1023上失败的事实表明,这个限制确实受到了影响,因为在一个典型的Linux上:

  1. 文件描述符是从0开始分配的连续数字,
  2. 默认限制(ulimit -n)是1024打开的文件描述符

您可以使用ls -l /proc/<pid>/fd | wc -l检查打开的文件描述符的数量。我怀疑你有很多打开(常规)的文件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69289061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档