Создание сокетов IPv4 и IPv6 для ядра Linux: ошибки EPROTONOSUPPORT и ESOCKTNOSUPPORT
Я пытаюсь понять реализации ядра Linux для сокетов IPv4 и IPv6.
Оба метода inet_create()
а также inet6_create()
выглядит очень похоже. Они оба могут вернуться в пользовательское пространство EPROTONOSUPPORT
или же ESOCKTNOSUPPORT
Интересно, при каких обстоятельствах это может произойти.
1 ответ
Решение
ESOCKTNOSUPPORT
означает, что тип сокета не поддерживается для выбранного протокола. Например, вы не можете создать SOCK_SEQPACKET
с IPPROTO_IP
, Согласно справочной странице ip(7), только SOCK_STREAM
, SOCK_DGRAM
а также SOCK_RAW
допустимые типы сокетов для ip.
EPROTONOSUPPORT
означает, что выбранный протокол сокета не поддерживается. Например, если вы попросите AF_INET6
и системный администратор отключил IPv6 путем внесения в черный список модуля.