Служба потоковых сокетов должна соответствовать требованиям для службы сокетов , а также дополнительным требованиям, перечисленным ниже.
В таблице ниже X обозначает класс обслуживания потоковых сокетов, a обозначает значение типа b обозначает значение типа X::implementation_type, ec обозначает значение типа error_code, f обозначает значение типа socket_base::message_flags, mb обозначает значение, удовлетворяющее требованиям мутируемой буферной последовательности, rh обозначает соответствие значений ReadHandler требованиям, cb обозначает значение, удовлетворяющее требованиям постоянной буферной последовательности , а wh обозначает соответствие значения WriteHandler требованиям.
Table 33. StreamSocketService requirements
выражение
тип возврата
утверждение/примечание пред/пост-условие
a.(b,mb,f,ec);
size_t
pre: a.is_open(b).
Считывает один или несколько байт данных из подключенного гнезда b.
Изменяемая последовательность буфера mb определяет память, в которой должны быть размещены данные. Операция должна всегда полностью заполнять буфер в последовательности перед переходом к следующей.
В случае успеха возвращает количество прочитанных байтов. В противном случае возвращается 0. Если общий размер всех буферов в последовательности mb составляет 0, функция должна вернуться 0 немедленно.
Если операция завершается из-за изящного закрытия соединения сверстником, операция должна выйти из строя с error::eof.
a.async_receive(b,mb,f,rh);
void
pre: a.is_open(b).
Инициирует асинхронную операцию для считывания одного или нескольких байтов данных из подключенного гнезда b. Операция выполняется через объект io_servicea.get_io_service() и ведет себя в соответствии с требованиями асинхронной операции.
Изменяемая буферная последовательность mb определяет память, где должны быть размещены данные. Операция должна всегда полностью заполнять буфер в последовательности перед переходом к следующей.
Реализация должна поддерживать одну или более копий mb до тех пор, пока операция чтения больше не потребует доступа к памяти, указанной буферами в последовательности. Программа должна гарантировать, что память действительна до тех пор, пока:
& #8212; последняя копия mb не будет уничтожена, или
& #8212; не будет задействован обработчик асинхронной операции,
в зависимости от того, что наступит раньше. Если общий размер всех буферов в последовательности mb составляет 0, операция асинхронного чтения должна быть выполнена немедленно и пройти 0 в качестве аргумента для обработчика, который указывает количество прочитанных байтов.
Если операция завершается из-за изящного закрытия соединения сверстником, операция должна выйти из строя с error::eof.
Если операция завершается успешно, объект rh вызывается с числом переданных байтов. В противном случае он вызывается 0.
a.end(b,cb,f,ec);
size_t
pre: a.is_open(b).
Записывает один или несколько байтов данных в подключенный сокет b.
Постоянная буферная последовательность cb определяет память, в которой находятся данные, подлежащие записи. Операция должна всегда полностью записывать буфер в последовательности перед переходом к следующей.
В случае успеха возвращает количество написанных байтов. В противном случае возвращается 0. Если общий размер всех буферов в последовательности cb составляет 0, функция должна вернуться 0 немедленно.
a.async_send(b,cb,f,wh);
void
pre: a.is_open(b).
Инициирует асинхронную операцию для записи одного или нескольких байтов данных в подключенный сокет b. Операция выполняется через объект io_servicea.get_io_service() и ведет себя в соответствии с требованиями асинхронной операции.
Постоянная буферная последовательность cb определяет память, где находятся данные, подлежащие записи. Операция должна всегда полностью записывать буфер в последовательности перед переходом к следующей.
Реализация должна поддерживать одну или более копий cb до тех пор, пока операция записи больше не потребует доступа к памяти, указанной буферами в последовательности. Программа должна гарантировать, что память действительна до тех пор, пока:
& #8212; последняя копия cb не будет уничтожена, или
& #8212; не будет задействован обработчик асинхронной операции,
в зависимости от того, что наступит раньше. Если общий размер всех буферов в последовательности cb составляет 0, асинхронная операция должна быть выполнена немедленно и пройти 0 в качестве аргумента для обработчика, который указывает число прочитанных байтов.
Если операция завершается успешно, то WriteHandler объект wh вызывается с числом переданных байтов. В противном случае он вызывается 0.
Статья Stream socket service requirements раздела Boost.Asio Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.