Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 51 стр.

UptoLike

Составители: 

51
p_aliases альтернативные имена протокола;
p_propo номер протокола.
struct protoent * getprotobyname (const char *NAME)
Возвращает информацию о протоколе, задаваемом именем NAME.
struct protoent * getprotobynumber (int PROTOCOL)
Возвращает информацию о протоколе, задаваемом номером протокола
PROTOCOL.
void setprotoent (int STAYOPEN)
Открывает базу данных протокола для сканирования. Если STAYOPEN не
равно нулю, вызовы функций getprotobyname и getprotobynumber не закрывают базу
данных.
struct protoent * getprotoent (void)
Возвращает следующую запись из базы данных протоколов. Если предыдущая
запись была последней, возвращается нулевой указатель.
void endprotoent (void)
Закрывает базу данных протоколов.
Приведем пример создания гнезда в пространстве имен интернет.
int make_socket (uint16_t port)
{
int sock;
struct sockaddr_in name;
/* Create the socket. */
sock = socket (PF_INET, SOCK_STREAM, 0);
if (sock < 0)
{
perror ("socket");
exit (EXIT_FAILURE);
}
/* Give the socket a name. */
name.sin_family = AF_INET;
name.sin_port = htons (port);
name.sin_addr.s_addr = htonl (INADDR_ANY);
if (bind (sock, (struct sockaddr *) &name,
sizeof (name)) < 0)
{
perror ("bind");
exit (EXIT_FAILURE);
}
return sock;
}
Создание гнезда
Функции работы с гнездами определены в заголовочном файле <sys/socket.h>.
int socket (int NAMESPACE, int STYLE, int PROTOCOL)
Функция создает гнездо, используя стиль взаимодействия STYLE, пространство
имен NAMESPACE и протокол PROTOCOL. Значение протокола может быть равно
нулю, в этом случае используется значение по умолчанию. Возвращается дескриптор
файла для создаваемого гнезда, если функция выполнилась успешно и -1 - в случае
ошибки. переменная errno может принимать следующие значения:
EPROTONOSUPPORT протокол или способ взаимодействия не поддерживаются
пространством имен;
EMFILE процесс имеет слишком много дескрипторов открытых
файлов;
p_aliases        альтернативные имена протокола;
p_propo          номер протокола.
        struct protoent * getprotobyname (const char *NAME)
        Возвращает информацию о протоколе, задаваемом именем NAME.
        struct protoent * getprotobynumber (int PROTOCOL)
     Возвращает информацию о протоколе, задаваемом номером протокола
PROTOCOL.
        void setprotoent (int STAYOPEN)
        Открывает базу данных протокола для сканирования. Если STAYOPEN не
равно нулю, вызовы функций getprotobyname и getprotobynumber не закрывают базу
данных.
        struct protoent * getprotoent (void)
        Возвращает следующую запись из базы данных протоколов. Если предыдущая
запись была последней, возвращается нулевой указатель.
        void endprotoent (void)
        Закрывает базу данных протоколов.
        Приведем пример создания гнезда в пространстве имен интернет.

        int make_socket (uint16_t port)
        {
          int sock;
          struct sockaddr_in name;

            /* Create the socket. */
            sock = socket (PF_INET, SOCK_STREAM, 0);
            if (sock < 0)
            {
              perror ("socket");
              exit (EXIT_FAILURE);
            }

            /* Give the socket a name. */
            name.sin_family = AF_INET;
            name.sin_port = htons (port);
            name.sin_addr.s_addr = htonl (INADDR_ANY);
            if (bind (sock, (struct sockaddr *) &name,
              sizeof (name)) < 0)
            {
              perror ("bind");
              exit (EXIT_FAILURE);
            }

            return sock;
        }

        Создание гнезда
        Функции работы с гнездами определены в заголовочном файле .
        int socket (int NAMESPACE, int STYLE, int PROTOCOL)
       Функция создает гнездо, используя стиль взаимодействия STYLE, пространство
имен NAMESPACE и протокол PROTOCOL. Значение протокола может быть равно
нулю, в этом случае используется значение по умолчанию. Возвращается дескриптор
файла для создаваемого гнезда, если функция выполнилась успешно и -1 - в случае
ошибки. переменная errno может принимать следующие значения:
EPROTONOSUPPORT            протокол или способ взаимодействия не поддерживаются
                           пространством имен;
EMFILE                     процесс имеет слишком много дескрипторов открытых
                           файлов;


                                                                                51