FFL
1.0
Finfly Foundation Library
|
Сокет. Подробнее...
Классы | |
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). |
Протокол.
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 (...) |
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 | Ошибка при вызове функции. |
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, если операции ввода игнорируются. Сокет готов для ввода, если:
|
[in,out] | _w | Указатель на набор сокетов вывода. На входе набор содержит сокеты, для которых ожидается операция вывода. На выходе - сокеты, которые готовы для выполнения синхронной оперции вывода. Параметр может иметь значение NULL, если операции вывода игнорируются. Сокет готов для вывода если:
|
[in,out] | _e | Указатель на набор сокетов исключительных ситуаций. На входе набор содержит сокеты, для которых ожидаются исключительные ситуации. На выходе - сокеты для которых существуют исключительные ситуации. Параметр может иметь значение NULL, если исключительные ситуации игнорируются. Исключительной ситуацией может быть:
|
[in] | _t | Время в миллисекундах, в течение которого ожидается готовность сокетов. Если ни один из сокетов не готов для выполенения операции ввода/вывода, то выполнение программы приостанавливается до истечения указанного интервала времени или до момента готовности по крайней мере одного из сокетов. Если значение параметра равно 0, метод возвращает управление немедленно, опрашивая текущее состояние сокетов. Если значение параметра равно -1, то на ожидание влияет только готовность сокетов. |
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] |
Максимальный размер очереди входящих соединений.
Значение не является собственно размером очереди, а представляет собой выделенное значение, на основании которого автоматически выбирается приемлимый для реализации предельный размер очереди.