8.14. Определение исходящего интерфейса для UDP

8.14. Определение исходящего интерфейса для UDP

С помощью присоединенного сокета UDP можно также задавать исходящий интерфейс, который будет использован для отправки дейтаграмм к определенному получателю. Это объясняется побочным эффектом функции connect, примененной к сокету UDP: ядро выбирает локальный IP-адрес (предполагается, что процесс еще не вызвал функцию bind для явного его задания). Локальный адрес выбирается в процессе поиска адреса получателя в таблице маршрутизации, причем берется основной IP-адрес интерфейса, с которого, согласно таблице, будут отправляться дейтаграммы.

В листинге 8.13 показана простая программа UDP, которая с помощью функции connect соединяется с заданным IP-адресом и затем вызывает функцию getsockname, выводя локальный IP-адрес и порт.

Листинг 8.13. Программа UDP, использующая функцию connect для определения исходящего интерфейса

//udpcliserv/udpcli09.c

 1 #include "unp.h"

 2 int

 3 main(int argc, char **argv)

 4 {

 5  int sockfd;

 6  socklen_t len;

 7  struct sockaddr_in cliaddr, servaddr;

 8  if (argc != 2)

 9   err_quit("usage: udpcli <Ipaddress>");

10  sockfd = Socket(AF_INET, SOCK_DGRAM, 0);

11  bzero(&servaddr, sizeof(servaddr));

12  servaddr.sin_family = AF_INET;

13  servaddr.sin_port = htons(SERV_PORT);

14  Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);

15  Connect(sockfd, (SA*)&servaddr, sizeof(servaddr));

16  len = sizeof(cliaddr);

17  Getsockname(sockfd, (SA*)&cliaddr, &len);

18  printf("local address %s ", Sock_ntop((SA*)&cliaddr, len));

19  exit(0);

20 }

Если мы запустим программу на узле freebsd с несколькими сетевыми интерфейсами, то получим следующий вывод:

freebsd % udpcli09 206.168.112.96

local address 12.106.32.254:52329

freebsd % udpcli09 192.168.42.2

local address 192.168.42.1:52330

freebsd % udpcli09 127.0.0.1

local address 127.0.0.1:52331

По рис. 1.7 видно, что когда мы запускаем программу первые два раза, аргументом командной строки является IP-адрес в разных сетях Ethernet. Ядро присваивает локальный IP-адрес первичному адресу интерфейса в соответствующей сети Ethernet. При вызове функции connect на сокете UDP ничего не отправляется на этот узел — это полностью локальная операция, которая сохраняет IP-адрес и порт собеседника. Мы также видим, что вызов функции connect на неприсоединенном сокете UDP также присваивает сокету динамически назначаемый порт.

ПРИМЕЧАНИЕ

К сожалению, эта технология действует не во всех реализациях, что особенно касается ядер, происходящих от SVR4. Например, это не работает в Solaris 2.5, но работает в AIX, Digital Unix, Linux, MacOS X и Solaris 2.6.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Элементы интерфейса

Из книги Видеосамоучитель монтажа домашнего видео в Adobe Premiere Pro CS3 автора Днепров Александр Г

Элементы интерфейса Теперь поговорим об отключении или включении отдельных элементов интерфейса.Отключение анимацииОтключить все эффекты анимации можно с помощью параметра REG_DWORD-типа TurnOffSPIAnimations, расположенного в ветви реестра HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer.


Настройка интерфейса

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Настройка интерфейса Существует возможность изменить расположение элементов интерфейса Проигрывателя Windows Media – переместить все элементы интерфейса в противоположную сторону (рис. 4.9). Для этого достаточно параметру REG_DWORD-типа ForceBiDi присвоить значение 1. Данный параметр


Настройка интерфейса

Из книги 3ds Max 2008 автора Верстак Владимир Антонович

Настройка интерфейса Разработчики программы Premiere Pro дали пользователю возможность изменять интерфейс программы по своему вкусу. Вы можете переместить окна в другие части экрана, изменить их размер, поменять местами вкладки, а также вынести содержимое какой-либо вкладки


Тип интерфейса

Из книги Photoshop. Мультимедийный курс автора Мединов Олег

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


Определение открытого интерфейса класса

Из книги Windows Vista. Мультимедийный курс автора Мединов Олег

Определение открытого интерфейса класса После создания данных внутреннего состояния класса и набора конструкторов следующим шагом должно быть определение деталей открытого интерфейса класса. Этим терминам обозначают множество членов, непосредственно доступных из


Элементы интерфейса

Из книги Adobe Photoshop CS3 автора Завгородний Владимир

Элементы интерфейса Первое, что вы увидите после запуска программы 3ds Max 2008, – ее основное окно (рис. 1.1). Рис. 1.1. Окно программы 3ds Max 2008Если вы начинающий пользователь и не знакомы с интерфейсом, сначала осмотрите элементы и ознакомьтесь с окружением. Вы увидите, что


Настройка интерфейса

Из книги КОМПАС-3D V10 на 100 % автора Кидрук Максим Иванович

Настройка интерфейса Все палитры в окне программы Photoshop можно перемещать. Вы можете скрыть палитры, которыми не пользуетесь, или, наоборот, отобразить те, которые вам нужны чаще всего. Чтобы не настраивать интерфейс приложения при каждом запуске, в Photoshop предусмотрена


Элементы интерфейса

Из книги 3ds Max 2008 на 100 % автора Верстак Владимир Антонович

Элементы интерфейса При знакомстве с любым новым программным продуктом полезно сразу иметь информацию о его назначении, компонентах, основных возможностях и отличиях от предыдущих версий. Это справедливо для новой операционной системы, особенно если она представляет


Общий вид интерфейса

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Общий вид интерфейса Первого же взгляда на программу Adobe Photoshop (рис. 6.1) достаточно, чтобы увидеть знакомые элементы управления: кнопки управления окном, строку меню, полосы прокрутки у отдельных окон. В то же время есть и полностью незнакомые элементы. Мы рассмотрим их


Настройка интерфейса

Из книги автора

Настройка интерфейса Под настройкой интерфейса системы КОМПАС-3D следует понимать следующие возможности изменения внешнего вида программы:• выбор стиля;• настройка внешнего вида;• изменение состава пунктов главного меню;• изменение состава панелей инструментов;•


1.1. Элементы интерфейса

Из книги автора

1.1. Элементы интерфейса Первое, что вы увидите после запуска программы 3ds Max 2008, – ее основное окно (рис. 1.1).Если вы начинающий пользователь и не встечались с интерфейсом программы, сначала осмотрите элементы и ознакомьтесь с окружением. Вы увидите, что интерфейс


9.2. Модели интерфейса

Из книги автора

9.2. Модели интерфейса Сокеты SCTP бывают двух типов: «один-к-одному» и «один-ко-многим». Сокету типа «один-к-одному» всегда сопоставляется ровно одна ассоциация SCTP. Вспомните, что в разделе 2.5 мы отмечали, что ассоциация является соединением между двумя системами, которое


17.5. Конфигурация интерфейса

Из книги автора

17.5. Конфигурация интерфейса Один из шагов, выполняемых многими программами, работающими с сетевыми интерфейсами системы, — это получение от ядра списка всех интерфейсов, сконфигурированных в системе. Это делается с помощью вызова SIOCGIFCONF, использующего структуру ifconf,