Индустрия программирования


Одна из возможных конфигураций программных гнезд - часть 3


count = send(sd, msg, length,
flags);
count = recv(sd, buf, length,
flags);
В send:

  • msg
    указывает на буфер с данными, которые требуется послать
  • length
    - длина этого буфера
  • flags
    == MSG_OOB
    внеочередная посылка данных

В recv:

  • buf
    указывает на буфер, в который следует поместить принимаемые данные
  • length
    - максимальная длина этого буфера
  • flags
    == MSG_PEEK
    перепись сообщения в пользовательский буфер без его удаления
    из системных буферов

Вместо send
и
recv
можно использовать
read
и
write

  • выполняются аналогично send
    и recv

Для посылки и приема сообщений в дейтаграммном
режиме:

count = sendto(sd, msg,
length, flags, socknm, socknlen);
count = recvfrom(sd, buf,
length, flags, socknm, socknlen);

  • смысл параметров sd,
    msg,
    buf
    и lenght
    аналогичен смыслу одноименных параметров функций send
    и recv
  • socknm
    и socknlen
    функции sendto
    задают имя программного гнезда, в которое посылается сообщение
  • могут быть опущены, если до этого вызывалась
    функция connect
  • параметры socknm
    и socknlen
    функции recvfrom
    позволяют серверу получить имя пославшего сообщение процесса-клиента

Немедленная ликвидация установленного соединения:
shutdown(sd, mode);

  • немедленно остановить коммуникации
  • со стороны посылающего процесса
  • со стороны принимающего процесса
  • с обеих сторон
  • в зависимости от значения параметра mode

shutdown отличаются
от close:

  • выполнение close
    последней "притормаживается" до окончания попыток системы
    доставить уже отправленные сообщения
  • shutdown разрывает
    соединение, но не ликвидирует дескрипторы ранее соединенных гнезд
  • для ликвидации требуется вызов close




Начало  Назад  Вперед