Это выглядит довольно необычно, так как socket (3) возвращает новый дескриптор файла.Предполагая, что вы используете Linux, это не сокет, который выдает код ошибки (socket () вернет ENFILE при любой файловой ошибке при получении дескриптора).сделайте две вещи: сначала убедитесь, что errno очищен перед вызовом socket ().Затем сохраните errno в локальной переменной сразу после выхода из socket () с ошибкой.Я думаю, вы обнаружите, что errno имеет другое значение или это другая функция, которая не работает.