По каким причинам создание сокета может завершиться неудачей? - PullRequest
0 голосов
/ 28 января 2019

Я создаю сокет с параметрами, указанными ниже -

fd = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);

Но по какой-то причине создание сокета не удается, и для fd установлено значение -1. ​​

  1. Я хотелчтобы понять, по какой и какой причине может произойти сбой при создании сокета?
  2. Как выяснить, по какой причине создание сокета в моем случае будет неудачным?

Примечание: И этоявляется постоянно воспроизводимым, мы повторяем попытку создания сокета 5 раз подряд с разрывом в 500 мсек, и он все 5 раз терпит неудачу.

1 Ответ

0 голосов
/ 28 января 2019

Как говорит Евгений Ш / WeatherVane, чтобы увидеть ошибку:

#include <errno.h>
#include <stdio.h>
#include <string.h>
...
fd = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
if (fd == -1) {
  printf("error cannot create socket, errno = %d : %s\n",
         errno, strerror(errno));
  ...return/exit etc
}
...

Я ошибаюсь или домен должен быть PF_INET, тогда socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP); должен быть socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);?

sctp(7) - Linux man page

Редактировать: под raspbian (Linux raspberrypi 4.14.79) я могу сделать оба


Ошибка также возникает, есливы запускаете как root ?Особенно, если вы используете Android (см. , что может вызвать ошибку «Отказано в доступе» сокета ()? )

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