Я получаю сообщение об ошибке «Слишком много открытых файлов» после вызова сокета в приведенном ниже коде сервера. Этот код вызывается многократно, и это происходит только после того, как server_SD получает значение 1022. Поэтому я предполагаю, что я достигаю предела 1024, как это запрещено «ulimit -n». Что я не понимаю, так это то, что я закрываю сокет, что должно сделать fd многоразовым, но этого, похоже, не происходит.
Примечания: Используя linux, да и клиент также закрыт, нет, я не являюсь пользователем root, поэтому перемещение ограничений не вариант, у меня должно быть максимум 20 (или около того) сокетов, открытых одновременно. В течение всей жизни моей программы я ожидал бы открыть и закрыть около 1000000 сокетов (следовательно, нужно многократно использовать очень сильно).
server_SD = socket (AF_INET, SOCK_STREAM, 0);
bind (server_SD, (struct sockaddr *) &server_address, server_len)
listen (server_SD,1)
client_SD = accept (server_SD, (struct sockaddr *)&client_address, &client_len)
// read, write etc...
shutdown (server_SD, 2);
close (server_SD)
Кто-нибудь знает, как гарантировать закрытие и повторное использование?
Спасибо.