|
|
Компьютеры - Сокеты Беркли - Передача данных23 января 2011
Оглавление: 1. Сокеты Беркли 2. Интерфейс сокета Беркли 3. Заголовочные файлы 4. Функции 5. Дополнительные параметры для сокетов 6. Передача данных 7. Пример клиента и сервера, использующих TCP 8. Пример клиента и сервера, использующие UDP
Для передачи данных можно пользоваться стандартными функциями чтения/записи файлов read и write , но есть специальные функции для передачи данных через сокеты:
- send
- recv
- sendto
- recvfrom
- sendmsg
- recvmsg
Нужно обратить внимание, что при использовании протокола TCP есть вероятность получить меньше данных, чем было передано, так как ещё не все данные были переданы, поэтому нужно либо дождаться, когда функция recv возвратит 0 байт, либо выставить флаг MSG_WAITALL для функции recv , что заставит её дождаться окончания передачи. Для остальных типов сокетов флаг MSG_WAITALL ничего не меняет. Смотри также главу «Блокирующие и неблокирующие сокеты».
Высвобождение ресурсов
Система не освобождает ресурсы, выделенные при вызове socket , пока не произойдет вызова close . Это особенно важно в случае, если вызов connect прошел неудачно и может быть повторен. Каждый вызов socket должен иметь соответствующий вызов close во всех возможных путях исполнения. Необходимо добавлять заголовочный файл <unistd.h> для поддержки функции закрытия.
Результатом выполнения системного вызова close является только обращение к интерфейсу для закрытия сокета, а не закрытие самого сокета. Это является командой для ядра закрыть сокет. Иногда, на серверной стороне сокет может перейти в режим ожидания TIME_WAIT до 4 минут.
Просмотров: 8616
|