как узнать, имеет ли используемая мной ОС Linux конкретные системные вызовы?

Я создаю приложение прошивки для занятой коробки. Мое приложение использует все системные вызовы, связанные с сокетами, но когда я запускаю программу, клиент не может подключиться к серверу, даже если порт сервера открыт (проверяется с помощью 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

Что я здесь не так делаю? любая помощь?

-2

Решение

Если вы не скомпилировали свое ядро ​​в необычной конфигурации, у вас должны быть включены все сетевые функции (это означает, что ваши системные вызовы должны быть включены)

Размещение вашего ошибочного кода может быть идеей, о которой уже было сообщено в комментариях (следуйте комментарию @ SomeProgrammerDude)

РЕДАКТИРОВАТЬ

Системные вызовы используют фиксированные, зарегистрированные идентификаторы (внутренние целочисленные идентификаторы) для выбора правильного системного вызова, и это должно работать с различными ядрами и различными стандартными библиотеками, которые связывают имена идентификаторов, которыми мы знаем системный вызов. Если вы модифицируете какой-либо из них, вы нарушите интерфейс stdlib (или ядро), чтобы они были исправлены. Даже если функциональность не реализована, точка входа системного вызова должна работать. Обычно в системных вызовах, которые на самом деле не реализованы, есть функция-заглушка, ограничивающая выдачу ошибки при вызове.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]