Книга: TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
21.10.1 Вызовы в серверной программе UDP
21.10.1 Вызовы в серверной программе UDP
1. sockMain = socket(AF_NET, SOCK_DGRAM, 0);
Семейство адресов — снова Интернет.
2. bzero((char *)&servAddr, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = 0;
Вызовы инициализации адресной структуры сервера те же, что и в программе для TCP.
3. bind(sockMain, &servAddr, sizeof(servAddr));
Как и прежде, bind получает порт для сервера и записывает значения в TCB. Конечно, по сравнению с TCP, UDP содержит очень мало информации.
4. getsockname(sockMain, &servAddr, &length);
Использовать getsockname, чтобы извлечь присвоенный socket порт.
5. msgLength = recvfrom(sockMain, buf, BUFLEN, 0, &clientAddr, &length);
Вызов recvfrom имеет форму:
recvfrom(дескриптор_socket, входной_буфер, длина_буфера, флаги, исходная_адресная_структура, указатель_на_длину_исходной_адресной_структуры)
Флаги позволяют вызывающей стороне просмотреть сообщение без его фактического получения. После возвращения исходная адресная структура заполняется IP-адресом и номером порта клиента. Необходим указатель на длину исходного адреса, поскольку она может быть изменена при вставке в поле фактического адреса клиента.
6. inet_ntoa(clientAddr.sin_addr);
Этот вызов преобразует 32-разрядный адрес Интернета клиента в знакомую нам нотацию этого адреса с точками и десятичными значениями.
- UDP characteristics
- UDP headers
- UDP connections
- UDP matches
- Системные вызовы и драйверы устройств
- Глава 6. Ведение складского учета в программе «Складской учет»
- Системные вызовы управления процессорной привязкой
- Вызовы функций
- Хочу порисовать – в какой программе и как это делается?
- Применение PHP-технологий в программе HtmlPad
- Другие системные вызовы для управления файлами
- Листинг 4.3. Информация о программе sudo