我写了一个小的TCP服务器,它创建用于每个传入连接一个新的线程:在pthread_create:无法分配存储器
while (server_running)
{
client_sock = accept(server_sock,
(struct sockaddr *)&client_name,
&client_name_len);
if(!server_running)
break;
if (client_sock == -1)
continue;
/* accept_request(client_sock); */
if (pthread_create(&newthread , NULL, &accept_request, &client_sock) != 0)
perror("pthread_create");
}
后约380全成连接,该错误消息
“在pthread_create:无法分配内存”
发生在每一个新的连接尝试。我真的不知道这是从哪里来的,因为accept_request
正常运行。我还注意到,在运行过程中存在与状态TIME_WAIT
许多连接(我用netstat
此)。那么哪里可能出现问题?
[MCVE],虽然这看起来并不甚至有点您张贴什么好。 – EOF
你有没有关闭连接并结束线程?两者都是有限的资源,看起来你已经达到了线程的限制... – Kninnug
也许你没有在最后释放线程的资源。您必须分离线程或将其加入,以便线程使用的所有内存在退出后都会释放。在你的情况下,它可能最好创建从头开始分离的线程。 –