Нечетная ошибка socket() возвращает -1, но errno=ERROR_SUCCESS

Я разрабатываю выделенный игровой сервер на Linux-машине на C/C++ (смешанный). У меня есть следующий фрагмент кода:

int sockfd=socket(AI_INET, SOCK_DGRAM, 0);
if(sockfd==-1)
{
    int err=errno;
    fprintf(stderr,"%s",strerror(err));
    exit(1);
}

Моя проблема здесь в том, что сокет возвращает -1 (подразумевая сбой), и строка ошибки печатается, но это «Успех» (ERROR_SUCCESS).

Другие примечания:

  • Я запрашиваю сокет на порту> 1024 (вне контекста, но подумал, что упомяну)
  • Я запускаю приложение как суперпользователь

person aviraldg    schedule 04.01.2010    source источник
comment
Вы вырезали/вставили код из своего приложения или перепечатали? Если это повторный тип, я бы проверил, что ваш код имеет == (сравните) в if, а не = (назначение).   -  person Martin York    schedule 04.01.2010
comment
Это `==', все в порядке...   -  person aviraldg    schedule 04.01.2010


Ответы (2)


Я чувствую себя невероятно глупо. Внимательно просматривая мой код, на моем dev-компьютере показывает:

if(sockfd==-1);
...
person aviraldg    schedule 04.01.2010
comment
Вы не первый, кто это делает, и не вы последний :-) - person moritz; 04.01.2010
comment
Именно поэтому существует ERROR_SUCCESS. :-) - person T.E.D.; 04.01.2010
comment
aviraldg, возможно, вы захотите принять свой собственный ответ, чтобы вопрос казался решенным. - person Georg Fritzsche; 04.01.2010
comment
Пусть это будет уроком: всегда копируйте и вставляйте настоящий код, демонстрирующий проблему, о которой вы спрашиваете. - person Rob Kennedy; 04.01.2010

У вас запущено несколько потоков? Возможно, они перезаписывают значение errno.

Есть ли строки кода между socket() и if(), которые вы пропустили? Другой вызов функции может перезаписать файл errno.

person Robert    schedule 04.01.2010
comment
Стандарт C не имеет концепции потоков. Хотя posix требует, чтобы он был локальным для потока. - person nos; 04.01.2010