Читаем Linux API. Исчерпывающее руководство полностью

if (bind(sfd, rp->ai_addr, rp->ai_addrlen) == 0)

break; /* Успех */

/* Сбой в вызове bind(): закрываем этот сокет и пробуем следующий адрес */

close(sfd);

}

if (rp!= NULL && doListen) {

if (listen(sfd, backlog) == -1) {

freeaddrinfo(result);

return -1;

}

}

if (rp!= NULL && addrlen!= NULL)

*addrlen = rp->ai_addrlen;

/* Возвращаем размер структуры с адресом */

freeaddrinfo(result);

return (rp == NULL)? — 1: sfd;

}

int

inetListen(const char *service, int backlog, socklen_t *addrlen)

{

return inetPassiveSocket(service, SOCK_STREAM, addrlen, TRUE, backlog);

}

int

inetBind(const char *service, int type, socklen_t *addrlen)

{

return inetPassiveSocket(service, type, addrlen, FALSE, 0);

}

char *

inetAddressStr(const struct sockaddr *addr, socklen_t addrlen,

char *addrStr, int addrStrLen)

{

char host[NI_MAXHOST], service[NI_MAXSERV];

if (getnameinfo(addr, addrlen, host, NI_MAXHOST,

service, NI_MAXSERV, NI_NUMERICSERV) == 0)

snprintf(addrStr, addrStrLen, "(%s, %s)", host, service);

else

snprintf(addrStr, addrStrLen, "(?UNKNOWN?)");

addrStr[addrStrLen — 1] = '\0'; /* Не забываем добавить нулевой символ в конце */

return addrStr;

}

sockets/inet_sockets.c

55.13. Сравнение сокетов в UNIX- и интернет-доменах

При написании приложений, которые взаимодействуют по сети, использование сокетов интернет-домена является обязательным. Но если наши приложения находятся на одном и том же компьютере, то можно применять сокеты как в интернет-, так и в UNIX-домене. Так какой же домен лучше выбрать в таком случае и чем при этом следует руководствоваться?

Применение сокетов интернет-домена обычно является наиболее простым вариантом, потому что это позволяет запускать программы как локально, так и на разных узлах сети. Однако существует несколько причин, которые могут склонить нас к выбору UNIX-домена.

• В ряде систем сокеты UNIX-домена работают быстрее, чем сокеты интернет-домена.

• Для управления доступом к сокетам UNIX-домена можно применять права доступа к каталогу (и к файлу, если речь идет о Linux). Таким образом можно позволить подключаться к слушающему сокету или отправлять датаграммы только приложениям, которые имеют заданного владельца или входят в определенную группу. Так мы получаем простой механизм аутентификации клиентов. В интернет-домене для организации чего-то подобного требуются дополнительные действия.

• При использовании сокетов UNIX-домена мы передаем дескрипторы открытых файлов и учетные данные отправителя (см. подраздел 57.13.3).

55.14. Дополнительная информация

Существует множество печатных и электронных ресурсов, посвященных TCP/IP и программным интерфейсам сокетов.

• [Stevens at al., 2004] — ключевая книга по сетевому программированию с помощью программного интерфейса сокетов. [Snader, 2000] содержит дополнительные полезные руководства на данную тему.

• [Stevens, 1994] и [Wright & Stevens, 1995] описывают стек TCP/IP в подробностях. [Comer, 2000], [Comer & Stevens, 1999], [Comer & Stevens, 2000], [Kozierok, 2005] и [Goralski, 2009] этот материал тоже хорошо освещен.

• [Tanenbaum, 2002] содержит общие сведения об истории компьютерных сетей.

• [Herbert, 2004] подробно описывает стек TCP/IP в Linux 2.6.

• Руководство GNU языка C (находится на http://www.gnu.org/) содержит обширную информацию о программном интерфейсе сокетов.

• На сайте IBM Redbook находится документ под названием TCP/IP Tutorial and Technical Overview, в котором подробно описаны основные понятия, относящиеся к сетям, внутренности TCP/IP, программный интерфейс сокетов и множество связанных с этим тем. Документ доступен для свободной загрузки на http://www.redbooks.ibm.com/.

• [Gont, 2008] и [Gont, 2009 (b)] рассматривают протоколы IPv4 и TCP с точки зрения безопасности.

• Новостная рассылка comp.protocols.tcp-ip посвящена вопросам, связанным с сетевыми протоколами семейства TCP/IP.

• В книге [Sarolahti & Kuznetsov, 2002] описывается управление перегрузкой и другие нюансы реализации TCP в Linux.

• Информацию, относящуюся в первую очередь к Linux, можно найти на следующих страницах руководства: socket(7), ip(7), raw(7), tcp(7), udp(7) и packet(7).

• См. также списки RFC-документов в разделе 54.7.

55.15. Резюме

Сокеты интернет-домена позволяют приложениям, находящимся на разных компьютерах, взаимодействовать друг с другом по сети TCP/IP. Адреса этих сокетов включают в себя IP-адрес и номер порта. В IPv4 числовые адреса занимают 32 бита, а в IPv6 — 128 бит. Датаграммные сокеты интернет-домена работают по протоколу UDP и предоставляют ненадежный канал взаимодействия, ориентированный на обмен сообщениями и не поддерживающий соединения. Потоковые сокеты интернет-домена работают по протоколу TCP; они обеспечивают надежный, двунаправленный, основанный на байтовом потоке канал обмена данными между двумя приложениями, соединенными друг с другом.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных