Я создаю приложение прошивки для занятой коробки. Мое приложение использует все системные вызовы, связанные с сокетами, но когда я запускаю программу, клиент не может подключиться к серверу, даже если порт сервера открыт (проверяется с помощью netstat -nl).
Можно ли установить флажок «занят», если в операционной системе включены системные вызовы, которые я использую?
Обновление: программа для подключения к сокету сервера работала на устройстве 1, и эта же программа не работала на устройстве 2. На device2 есть обновление ядра, поэтому я подумала, что некоторые системные вызовы не поддерживаются.
Произошла ошибка: 97 после системного вызова connect. это семейство протоколов не поддерживается.
Я заметил, что проблема вызвана в приведенной ниже части кода.
ADDRINFOA подсказки;
Результат PADDRINFOA;
hints.ai_family = AF_INET;
if (getaddrinfo (hostname, NULL, &hints, &result) == 0)
{
memcpy (sockaddr, result->ai_addr, result->ai_addrlen);
freeaddrinfo (result);
}
после Getaddrinfo sockaddr.ss_family равен 0. Который я ожидаю равным 2
Что я здесь не так делаю? любая помощь?
Если вы не скомпилировали свое ядро в необычной конфигурации, у вас должны быть включены все сетевые функции (это означает, что ваши системные вызовы должны быть включены)
Размещение вашего ошибочного кода может быть идеей, о которой уже было сообщено в комментариях (следуйте комментарию @ SomeProgrammerDude)
РЕДАКТИРОВАТЬ
Системные вызовы используют фиксированные, зарегистрированные идентификаторы (внутренние целочисленные идентификаторы) для выбора правильного системного вызова, и это должно работать с различными ядрами и различными стандартными библиотеками, которые связывают имена идентификаторов, которыми мы знаем системный вызов. Если вы модифицируете какой-либо из них, вы нарушите интерфейс stdlib (или ядро), чтобы они были исправлены. Даже если функциональность не реализована, точка входа системного вызова должна работать. Обычно в системных вызовах, которые на самом деле не реализованы, есть функция-заглушка, ограничивающая выдачу ошибки при вызове.
Других решений пока нет …