хороший ресурс для ошибок сокетов? - PullRequest
2 голосов
/ 05 октября 2008

Где я могу найти список всех типов ошибок сокетов в стиле bsd?

Ответы [ 4 ]

6 голосов
/ 05 октября 2008

в документации? Например, для connect () см .:

% man connect
...
  ECONNREFUSED
          No-one listening on the remote address.
  EISCONN
          The socket is already connected.

  ENETUNREACH
          Network is unreachable.
2 голосов
/ 05 октября 2008

Вы также можете найти список кодов ошибок (и общее описание их значения) на страницах открытой группы для каждой функции (например, connect ).

1 голос
/ 06 октября 2008

Многие функции установят errno при сбое, и вместо того, чтобы самостоятельно проходить errno.h и преобразовывать номер ошибки в строки, вам гораздо лучше вызвать perror.

perror выведет соответствующее сообщение текущего errno в stderr с необязательным префиксом.

Пример использования:

if (connect())
{
    perror("connect() failed in function foo");
    ...
}
У

perror есть друзья по имени strerror и strerror_r, которые могут оказаться полезными, если вы хотите захватить строку для использования в местах, отличных от stderr.

1 голос
/ 05 октября 2008

Если вы хотите узнать все возможные ошибки или некоторые комментарии к ним, вы можете взглянуть на заголовочные файлы, в системе Linux они находятся в

  • / USR / включать / ASM-родовое / ERRNO-base.h
#ifndef _ASM_GENERIC_ERRNO_BASE_H
#define _ASM_GENERIC_ERRNO_BASE_H

#define EPERM        1  /* Operation not permitted */
#define ENOENT       2  /* No such file or directory */
#define ESRCH        3  /* No such process */
#define EINTR        4  /* Interrupted system call */
#define EIO      5  /* I/O error */
#define ENXIO        6  /* No such device or address */
#define E2BIG        7  /* Argument list too long */
#define ENOEXEC      8  /* Exec format error */
#define EBADF        9  /* Bad file number */
#define ECHILD      10  /* No child processes */
#define EAGAIN      11  /* Try again */
...
  • / USR / включать / ASM-родовой / errno.h
#ifndef _ASM_GENERIC_ERRNO_H
#define _ASM_GENERIC_ERRNO_H

#include 

#define EDEADLK     35  /* Resource deadlock would occur */
#define ENAMETOOLONG    36  /* File name too long */
#define ENOLCK      37  /* No record locks available */
#define ENOSYS      38  /* Function not implemented */
#define ENOTEMPTY   39  /* Directory not empty */
#define ELOOP       40  /* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN  /* Operation would block */
...

Если вы хотите знать, что такое ошибочный вызов, например, socket () или connect () могут возвращаться, когда устанавливаете man-страницы разработки и попробуйте man socket или man connect

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