Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lections (1).doc
Скачиваний:
22
Добавлен:
12.02.2016
Размер:
1.43 Mб
Скачать

Ф-ція Bind

Ф-ція зв’язує сокет з локальними адресами протокола у випадку протокола Інтернету адреса протоколу це комбінація адрес IPv4 або IPv6 з 16 розрядним номером порта ТСР або UDP.

Bind (сокет, локальний, -адрес, довжина адреси)

Повертає 0 – коли успішно, -1 помилка.

Сокет - дескриптор сокета до якого її прив’язали

2-м аргументом є вказівник на специфычний для протокол адрес, з розмір структури адресу.

Очікування з’єднання listen

Функція LISTEN використовується лише для вже встановленого логічного з’єднання.

int listen (int socket, unsigned int n) (функция)

Функція LISTEN дає можливість вказаному сокету сприймати з’єднання, таким чином створюється сокет сервера.

Аргумент n визначає довжину черги для відкладених з’єднань.

Функція LISTEN повертає 0 при успіху і -1 у випадку невдачі. В змінній errno визначаються наступні коди помилок для цієї функції.

EBADF аргумент socket - недопустий описувач файлу.

ENOTSOCK аргумент socket – не сокет.

EOPNOTSUPP Вказаний сокет не підтримує цю операцію.

Отримання з’єднання accept

Коли сервер отримує з’єднання, він може створити з’єднання, приймаючи запит. Для цих цілей слід використовувати функцію ACCEPT.

Сокет, який був встановлений як сервер, може приймати запити з’єднання від багатьох клієнтів. Цей сокет сервера не стане частиною з’єднання, на заміну ACCEPT робить новий сокет, який розділяє з’єднання. ACCEPT повертає описувач для цього сокета.

Вихідний сокет сервера залишається доступним для очікування подальших запитів з’єднання.

Число відкладених запитів з’єднання на сокеті сервера кінечне. Якщо запити з’єднання прибувають скоріше, ніж сервер може їх обробити, черга може заповнитись, і додаткові запити отримають відказ з помилкою ECONNREFUSED. Можна визначити максимальну довжину черги, як аргумент функції LISTEN, хоча система може також накласти своє власне обмеження на довжину цієї черги.

int accept (int socket, struct sockaddr *addr, size_t *length_ptr)

Ця функція використовується для прийняття запиту на з’єднання у вказаному сокеті сервера.

Функція знаходиться в стані очікування, коли немає можливості прийняти з’єднання, якщо звичайно, вказаний сокет не має набору режимів неблокування.

Аргументи Addr і length_ptr використовуються щоб повернути інформацію відносно імені клієнтського сокета, яке ініціювало з’єднання.

Сокет, який був встановлений як сервер не стане частиною з’єднання; ACCEPT зробить новий сокет. ACCEPT повертає опис для цього сокета. Нормальне значення, яке поверне accept – опис файлу для нового сокету.

Після accept попередньо вказаний сокет залишається відкритим і не зв’язаним і продовжує чекати,поки його не закриють. Можна приймати інші з’єднання з цим сокетом викликаючи функцію accept знову.

Якщо виникає помилка accept повертає -1.

В змінній errno визначаються наступні коди помилок для цієї функції.

EBADF аргумент socket – недопустимий описувач файлу.

ENOTSOCK дескрипторний аргумент socket - не сокет.

EOPNOTSUPP описанный сокет не підтримує цю операцію.

EWOULDBLOCK сокет має набір режимів неблокування, і немає ніяких відложених з’єднань.

Функцію accept не дозволяється приміняти для сокета без встановленого логічного з’єднання.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]