FFL  1.0
Finfly Foundation Library
Классы | Открытые типы | Открытые члены | Открытые статические члены | Статические открытые данные | Защищенные данные
Класс ffl::ipc::socket

Сокет. Подробнее...

Граф наследования:ffl::ipc::socket:
Inheritance graph
[см. легенду]

Полный список членов класса

Классы

class  address
 Адрес сокета. Подробнее...
class  connection_gracefully_closed
 Исключительная ситуация при выполнении операции с закрытым соединением. Подробнее...
class  environment
 Окружение. Подробнее...
class  failure
 Ошибка вызове методов socket. Подробнее...
struct  info
 Информация об адресе сокета. Подробнее...
class  io_timeout
 Таймаут при выполнении операции ввода вывода с ожидаением. Подробнее...
class  set
 Набор сокетов. Подробнее...

Открытые типы

enum  type { ANYTYPE = 0, STREAM = SOCK_STREAM, DGRAM = SOCK_DGRAM }
 Типы сокетов. Подробнее...
enum  protocol {
  ANYPROTO = 0, ICMP = IPPROTO_ICMP, IGMP = IPPROTO_IGMP, TCP = IPPROTO_TCP,
  UDP = IPPROTO_UDP, ICMPV6 = IPPROTO_ICMPV6
}
 Протокол. Подробнее...
enum  hint {
  PASSIVE = AI_PASSIVE, CANONNAME = AI_CANONNAME, NUMERICHOST = AI_NUMERICHOST, ADDRCONFIG = AI_ADDRCONFIG,
  NON_AUTHORITATIVE = AI_NON_AUTHORITATIVE, SECURE = AI_SECURE, RETURN_PREFERRED_NAMES = AI_RETURN_PREFERRED_NAMES
}
 Указания для выбора сокетов (см. find()) Подробнее...
enum  parameter { RCVBUF = SO_RCVBUF, SNDBUF = SO_SNDBUF }
 \Переметр сокета. Подробнее...
typedef int hints
 Битовый массив условий выбора сокетов.

Открытые члены

 socket (environment &_e) throw ()
 Создать неинициализированный сокет.
 socket (environment &_e, address::family _f, type _t, protocol _p=ANYPROTO) throw (...)
 Создать сокет с указанными параметрами.
 socket (environment &_e, socket &_s) throw (...)
 Создать сокет для входящего соединения.
 socket (const socket &_s) throw ()
 Копировать сокет.
virtual ~socket ()
 Удалить сокет.
unsigned char get () throw (...)
 Получить и удалить символ из сокета.
unsigned char get (long _t) throw (...)
size_t read (char *_b, size_t _l) throw (...)
 Читать данные из сокета.
void read (char *_b, size_t _l, long _t) throw (...)
 Читать данные из сокета с ожиданием (безусловное чтение).
void put (unsigned char _c) throw (...)
 Записать символ в сокет.
void put (unsigned char _c, long _t) throw (...)
size_t write (const char *_b, size_t _l) throw (...)
 Запись данных в сокет.
void write (const char *_b, size_t _l, long _timeout) throw (...)
 Запись данных в сокет с ожиданием (безусловный вывод).
void write (const co_table &_t) throw (...)
void write (const co_table &_t, long _timeout) throw (...)
void read (co_table &_t) throw (...)
void read (co_table &_t, long _timeout) throw (...)
void blocking (bool _flag=true) throw (...)
 Установить/снять блокирующий режим.
void bind (const address &_a) throw (...)
 Назначить локальный адрес сокету.
void listen (int _backlog=MaxBackLog) throw (...)
 Установить сокет в режим прослушивания соединений.
void connect (const address &_a) throw (...)
 Установить соединение.
int option (parameter _p) throw (...)
 Получить значение параметра.
void option (parameter _p, int _v) throw (...)

Открытые статические члены

static void find (environment &_e, std::list< info > &_r, const char *_n, const char *_s, hints _h=0, address::family _f=address::UNSPEC, type _t=ANYTYPE, protocol _p=ANYPROTO) throw (...)
 Выбрать адресные данные сокета для указанного узла и имени сервиса (порта).
static size_t wait (socket::set *_r, socket::set *_w, socket::set *_e, long _t) throw (...)
 Ожидание синхронного ввода/вывода.

Статические открытые данные

static const int MaxBackLog = SOMAXCONN
 Максимальный размер очереди входящих соединений.

Защищенные данные

int Socket
 Дескриптор сокета.

Подробное описание

Сокет.


Перечисления

Указания для выбора сокетов (см. find())

Элементы перечислений:
PASSIVE 

Указывает, что выбираемые данные будут использоваться для подключения входящих соединений к указанному сервису. Если в этом случае имя узла равно NULL, то для семейств INET и INAT6 возвращается any-адрес. В том случае, когда any-адрес используется для сокета, через который подключаются входящие соединения, на этот сокет будут поступать соединения от всех зарегистированных интерфейсов локального компюьтера. Если флаг PASSIVE не указан и имя узла равно NULL, для сокета возвращается loopback-адрес.

CANONNAME 

Указывает, что нужно вернуть значение поля ffl::ipc::socket::info::Name. Флаг CANNONNAME несовместим с флагом PASSIVE, если имя хоста равно NULL (Winsock 2.2).

\Переметр сокета.

Элементы перечислений:
RCVBUF 

Общее количество памяти, зарезервированное под получени данных.

SNDBUF 

Общее количество памяти, зарезервированное под отправку данных.

Протокол.

Элементы перечислений:
ANYPROTO 

Протокол не определен.

ICMP 

The Internet Control Message Protocol (ICMP).

IGMP 

The Internet Group Management Protocol (IGMP).

TCP 

The Transmission Control Protocol (TCP).

UDP 

The User Datagram Protocol (UDP).

ICMPV6 

The Internet Control Message Protocol Version 6 (ICMPv6).

Типы сокетов.

Элементы перечислений:
ANYTYPE 

Тип сокета не определен.

STREAM 

Последовательная, двунапраленная передача данных в предварительным установлением соединения.

DGRAM 

Передача пакетов (датаграмм) без предварительного установления соединения.


Конструктор(ы)

ffl::ipc::socket::socket ( environment _e) throw ()

Создать неинициализированный сокет.

Аргументы:
[in]_eОкружение.
ffl::ipc::socket::socket ( environment _e,
address::family  _f,
socket::type  _t,
socket::protocol  _p = ANYPROTO 
) throw (...)

Создать сокет с указанными параметрами.

Аргументы:
[in]_eОкружение.
[in]_fСемейство адресов.
[in]_tТип сокета.
[in]_pПротокол.
Исключения:
failureОшибка при создании сокета.
ffl::ipc::socket::socket ( environment _e,
socket _s 
) throw (...)

Создать сокет для входящего соединения.

Извлекает соединение из очереди входящих соединений и создает для него сокет. Созданый сокет наследует все свойства исходного сокета _s за исключением пассивного режима. Если слушающий сокет находится в блокирующем режиме, то конструктор может блокировать выполнение программы, если очередь не содержит входящих соединений.

Аргументы:
[in]_eОкружение.
[in]_sСокет, который находится в режиме прослушивания входящих соединений (см. listen).
Исключения:
failureОшибка при создании сокета.
ffl::ipc::socket::socket ( const socket _s) throw () [inline]

Копировать сокет.

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

Аргументы:
[in]_sКопируемый сокет.
ffl::ipc::socket::~socket ( ) [virtual]

Удалить сокет.

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


Методы

void ffl::ipc::socket::bind ( const address _a) throw (...)

Назначить локальный адрес сокету.

Аргументы:
[in]_aАдрес сокета.
Исключения:
failureОшибка при присоении имени.
void ffl::ipc::socket::blocking ( bool  _flag = true) throw (...)

Установить/снять блокирующий режим.

Устанавливает/снимает блокирующий режим выполнения операций для сокета.

Аргументы:
_flagПризак установки блокирующего режима.
Исключения:
ipc::failureОшибка при установке блокирующего режима.
См. также:
read, write
void ffl::ipc::socket::connect ( const address _a) throw (...)

Установить соединение.

Аргументы:
[in]_aАдрес сокета, с которым устанавливается соединение.
Исключения:
failureОшибка при вызове функции.
void ffl::ipc::socket::find ( environment _e,
std::list< info > &  _r,
const char *  _n,
const char *  _s,
socket::hints  _h = 0,
address::family  _f = address::UNSPEC,
socket::type  _t = ANYTYPE,
socket::protocol  _p = ANYPROTO 
) throw (...) [static]

Выбрать адресные данные сокета для указанного узла и имени сервиса (порта).

Метод выполняет независимую от протокола трансляцию местонахождения и имени сервиса в набор адресов сокетов. Для протоколов IPv6 и IPv4 могут использоваться служба DNS или локальный файл ...devices/etc/hosts.

Аргументы:
[in]_eОкружение.
[out]_rСписок адресов.
[in]_nУказатель на строку, содержащую имя узла или числовой адрес хоста. Если параметр указывает на имя компьютера, то будут выбраны все постоянные адреса этого компьютера. Если параметр указывает на строку "localhost", то будут выбраны все loopback-адреса локального компьютера. Если переметр указывает на пустую строку, то будут выбраные все зарегестрированные адреса локального компьютера.
[in]_sУказатель на строку, которая содержит имя сервиса или номер порта. Возможные значения имен сервисов перечислены в файле ...drivers/etc/services.
[in]_hНабор битовых флагов для управления выбором (см. hint).
[in]_fСемейство выбираемых адресов. Если указано значение UNSPEC, то выбираются данные всех семейств. В противном случае выбираются данные только указанного семейства.
[in]_tТип сокета, поддерживаемый сервисом. Если указано значение ANYTYPE, то выбираются данные для всех типов сокетов, которые поддерживаются сервисом. В противном случае выбираются только данные для указанного типа (возможные значение типов пересичлены в файле ...drivers/etc/services).
[in]_pПротокол, поддерживаемый сервисом. Если указано значение ANYPROTO, то выбираются данные для всех протоколов, который поддерживаются сервисом. В противном случае выбираются только данные для указанного протокола (возможные значение протоколов пересичлены в файле ...drivers/etc/services).
Исключения:
failureОшибка при выборке данных.
unsigned char ffl::ipc::socket::get ( ) throw (...)

Получить и удалить символ из сокета.

Читает и удаляет один байт из сокета. Если сокет находится в блокирующем режиме, то управление возвращается только тогда, когда символ будет получен. Если сокет находится в асинхронном режиме и сокет не содержит данных для считывания, то возникает исключительная ситуация socket::failure.

Возвращает:
Полученый символ.
Исключения:
socket::failureОшибка при получении символа.
socket::connection_gracefully_closedСоединение вежливо закрыто.
void ffl::ipc::socket::listen ( int  _backlog = MaxBackLog) throw (...)

Установить сокет в режим прослушивания соединений.

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

Аргументы:
[in]_backlogРазмер очереди входящих соединений.
Исключения:
failureОшибка при вызове функции.
См. также:
bind
int ffl::ipc::socket::option ( parameter  _p) throw (...)

Получить значение параметра.

Аргументы:
[in]_pИдентификатор параметра.
Возвращает:
Значение параметра.
Исключения:
socket::failureОшибка при получении значения параметра.
void ffl::ipc::socket::put ( unsigned char  _c) throw (...)

Записать символ в сокет.

Записывает один байт в сокет. Если сокет находится в блокирующем режиме, то управление возвращается только тогда, когда символ будет записан. Если сокет находится в асинхронном режиме и сокет не имеет места для записи символа, то возникает исключительная ситуация socket::failure.

Аргументы:
[in]_cЗаписываемый символ.
Исключения:
socket::failureОшибка ввода/вывода.
size_t ffl::ipc::socket::read ( char *  _b,
size_t  _l 
) throw (...)

Читать данные из сокета.

Читает указанное количество байтов из сокета. Если сокет находится в блокирующем режиме, то управление возвращается только тогда, когда все данные будут считаны. Если сокет находится в асинхронном режиме, то управление может быть возвращено до того как все данные будут прочитаны. Во всех случаях метод возвращает количество прочитаных данных (от 1 до _l).

Аргументы:
[out]_bБуфер данных.
[in]_lКоличество байтов, которое должно быть считано.
Возвращает:
Количество считанных байтов.
Исключения:
socket::failureОшибка при чтении данных.
socket::connection_gracefully_closedОтключение сокета.
void ffl::ipc::socket::read ( char *  _b,
size_t  _l,
long  _t 
) throw (...)

Читать данные из сокета с ожиданием (безусловное чтение).

Считывает из потока указанное количество байтов. Успешное завершение операции гарантирует, что затребованное количество байтов получено.

Аргументы:
[out]_bБуфер для записи полученных данных.
[in]_lКоличество байтов, которое должно быть получено.
[in]_tВремя ожидания ввода. Если указано значение -1, то ожидание ввода не ограничено.
Исключения:
socket::io_timeoutВ пределах указанного интервала времени данные не получены.
socket::failureОшибка ввода/вывода.
size_t ffl::ipc::socket::wait ( socket::set _r,
socket::set _w,
socket::set _e,
long  _t 
) throw (...) [static]

Ожидание синхронного ввода/вывода.

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

Аргументы:
[in,out]_rУказатель на набор сокетов ввода. На входе набор содержит сокеты, для которых ожидается операция ввода. На выходе - сокеты, которые готовы для выполнения синхронной оперции ввода. Параметр может иметь значение NULL, если операции ввода игнорируются. Сокет готов для ввода, если:
  • Для сокета был вызыван метод listen() и есть входящие соединения (для входящего соединения может быть создан новый сокет).
  • Есть данные для чтения.
  • Соединение было закрыто (удаленным хостом) или разорвано (прерывание связи).
[in,out]_wУказатель на набор сокетов вывода. На входе набор содержит сокеты, для которых ожидается операция вывода. На выходе - сокеты, которые готовы для выполнения синхронной оперции вывода. Параметр может иметь значение NULL, если операции вывода игнорируются. Сокет готов для вывода если:
  • Сокет находится в неблокирующем режиме и соединение посредством вызова метода connect() успешно установлено.
  • Данные могут переданы.
[in,out]_eУказатель на набор сокетов исключительных ситуаций. На входе набор содержит сокеты, для которых ожидаются исключительные ситуации. На выходе - сокеты для которых существуют исключительные ситуации. Параметр может иметь значение NULL, если исключительные ситуации игнорируются. Исключительной ситуацией может быть:
  • Для сокета, который находится в неблокирующем режиме, ошибка соединения при использовании метода connect().
[in]_tВремя в миллисекундах, в течение которого ожидается готовность сокетов. Если ни один из сокетов не готов для выполенения операции ввода/вывода, то выполнение программы приостанавливается до истечения указанного интервала времени или до момента готовности по крайней мере одного из сокетов. Если значение параметра равно 0, метод возвращает управление немедленно, опрашивая текущее состояние сокетов. Если значение параметра равно -1, то на ожидание влияет только готовность сокетов.
Возвращает:
Количество сокетов, готовых для ввода вывода. Если за время ожидания ни один сокет не перешел в состояние готовности, то возвращает 0.
Исключения:
socket::failureОшибка при выполнении метода.
size_t ffl::ipc::socket::write ( const char *  _b,
size_t  _l 
) throw (...)

Запись данных в сокет.

Записывает указанное количество байтов в сокет. Если сокет находится в блокирующем режиме, то управление возвращается только тогда, когда все затребованное количество данных передано. Если сокет находится в асинхронном режиме, то управление может быть возвращено до того как все данные будут переданы. Во всех случаях метод возвращает количество переданных данных, которое в последнем случае может быть меньше чем затребованное (от 1 до _l).

Аргументы:
_bУказатель на буфер данных для вывода.
_lРазмер данных.
Возвращает:
Количество записанных данных.
Исключения:
socket::failureОшибка при записи данных.
void ffl::ipc::socket::write ( const char *  _b,
size_t  _l,
long  _timeout 
) throw (...)

Запись данных в сокет с ожиданием (безусловный вывод).

Записывает указанное количество байтов в сокет. Успешное завершение операции гарантирует, что указанное количество байтов записано.

Аргументы:
[in]_bУказатель на буфер данных для вывода.
[in]_lРазмер буфера данных.
[in]_timeoutВремя ожидания вывода. Если указано значение -1, то ожидание вывода не ограничено.
Исключения:
socket::failureОшибка вывода.
socket::io_timeoutВ пределах указанного промежутка времени данные не записаны.

Данные класса

const int ffl::ipc::socket::MaxBackLog = SOMAXCONN [static]

Максимальный размер очереди входящих соединений.

Значение не является собственно размером очереди, а представляет собой выделенное значение, на основании которого автоматически выбирается приемлимый для реализации предельный размер очереди.


Объявления и описания членов классов находятся в файлах:
 Указатель Классы Пространства имен Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Макросы