принять ошибку для выбора udp - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь использовать простую программу для использования select() с UDP, но когда я отправляю данные на порт UDP, программа выходит с ошибкой «Операция не поддерживается» при вызове accept().

Мой код от Обрабатывать несколько соединений сокетов с помощью fd_set и выбирать в Linux , с изменением, что я создаю сокет с SOCK_DGRAM вместо SOCK_STREAM:

if( (master_socket = socket(AF_INET , SOCK_DGRAM , 0)) == 0)

Указанный код работает нормально.

Чтобы отправить пакет UDP, я использую команду:

echo "this is my udp data">>/dev/udp/127.0.0.1/8888

1 Ответ

0 голосов
/ 24 мая 2018

accept() работает только с ориентированными на соединение протоколами, такими как TCP (SOCK_STREAM).Он не работает для протоколов без установления соединения, таких как UDP (SOCK_DGRAM).Это четко указано в accept() manpage :

Системный вызов accept () используется с типами сокетов на основе соединений (SOCK_STREAM, SOCK_SEQPACKET) ...

...

Ошибки
...
EOPNOTSUPP
Указанный сокет не относится к типу SOCK_STREAM.

В UDP все вынеобходимо bind() сокет, а затем вы можете использовать recvfrom() для чтения входящих пакетов и sendto() для отправки исходящих пакетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...