【发布时间】:2021-11-16 04:56:59
【问题描述】:
我的 C++ 应用程序创建 64-128 个 UDP 套接字。
它使用以下代码创建套接字:
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));
}
但是,目前它只创建 2 个套接字,因为 setsockopt() 在第三个请求上返回 -1:
sock=1023 result=-1 errno=0
(stderror(errno) 只是说success)
我很困惑,因为当我运行 ss 时,看起来并没有多少套接字在使用:
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?
这里的问题是什么?
【问题讨论】:
-
您粘贴的代码是否与产生您显示的输出的代码完全相同?
标签: c++ linux network-programming