Используется в asio::connect(), когда connect_ condition возвращает конечник (#12354).
Добавлен обход для проблемы обнаружения перемещения на MSVC 2015 Update 2 (#12115).
Изменение обхода, которое ранее было добавлено для сломанных брандмауэров Windows, связывалось только с 127.0.0.1, если getsockname сообщает 0.0.0.0 (#12406).
Добавлен SSL_COMP_free_compression_methods, чтобы исправить две утечки памяти, зарегистрированные при отключении, для OpenSSL версий > = 1.0.2 и < 1.1.0 (#10795).
Исправлена ошибка use_future компиляции, возникшая при некоторых стандартных реализациях библиотеки, путем изменения std::allocator<void> использовать не-void шаблон параметр.
Включить использование родного getaddrinfo по умолчанию на ОС Apple, а не эмуляцию в терминах getipnodebyname.
Работала над проблемой gcc, связанной с анонимными энами (#10042).
Перевернули Windows HANDLE, чтобы игнорировать ERROR_MORE_DATA. Вместо этого ошибка будет распространяться как с любой другой (т.е. в error_code или выброшена как system_error), а количество переданных байтов будет возвращено. Для кода, который должен обрабатывать частичные сообщения, следует использовать error_code перегрузка (#10034).
Исправлена ошибка in the signal_set implementation's signal number check (#9324).
Изменили предысторию Windows IOCP, чтобы не предположить, что SO_UPDATE_CONNECT_CONTEXT определяется (#10016).
Исправлена специфическая для Windows проблема, введенная в Asio 1.10.2, с использованием VerifyVersionInfo, а не GetVersionEx, как GetVersionEx был обесценен.
Изменение использования SSE2, а не встроенной сборки, чтобы позволить компилятору Cray работать.
Изменение порта завершения Windows I/O для использования ConnectEx, если таковые имеются, для IP-сетей, ориентированных на подключение.
Изменение io_service backend для не-Windows (и не-IOCP Windows) платформ для использования переменной одного состояния на io_service. Это касается потенциального состояния расы, когда run_one() используется из нескольких потоков.
Предотвращенный полный поток при вычислениях таймаутов на основе boost::chrono и std::chronoчасы (#9662, #978).
Сделаны дальнейшие изменения в EV_CLEAR обработка в kqueue backend, чтобы рассмотреть другие случаи, когда Close() системный звонок может повеситься на Mac OS X.
Исправлена бесконечная рекурсия в реализации resolver_query_base::flags::оператор~ (#9548).
Сделали реактор select более эффективным для Windows для большого количества розеток (#9528).
Исправлена специфическая для Windows проблема с поддержкой типа, сообщаемая gcc (#9550).
Предотвращено выполнение буферного теста только для компиляций, чтобы избежать запуска предупреждения адресного санита (#8295).
Отключен GetQueuedCompletionStatus тайм-аут на последних версиях Windows.
Добавлена поддержка строковых идентификаторов области при использовании многоадресных ссылок.
Измененная многоадресная группа IPv6 присоединяется к использованию идентификатора области адреса в качестве интерфейса, если интерфейс не указан явно.
Исправленная многоадресная тестовая неудача на Mac OS X и BSD с помощью многоадресной рассылки.
Различные незначительные улучшения документации (#8295, #9605, #9771).
Реализован ограниченный порт для Windows Runtime. Эта поддержка требует включения расширений языков. Из-за ограниченных возможностей, подвергаемых Windows Runtime API, порт также поставляется со следующими оговорками:
Основные объекты, такие как io_service, strand, буферы, состоящие операции, таймеры и т.д., должны работать нормально.
Для розеток поддерживается только клиентская сторона TCP.
Explicit binding of a client-side TCP refers is not supported.
Функция cancel() не поддерживается для розеток. Асинхронные операции могут быть отменены только путем закрытия розетки.
Операции, использующие null_buffers, не поддерживаются.
Только tcp::no_delay и socket_base::keep_alive поддерживаются варианты.
Resolvers не поддерживают названия служб, только номера. То есть вы должны использовать "80", а не "http".
Большинство флажков запросов рефрижератора не имеют эффекта.
Исправлена регрессия (введенная в Boost 1.54), где на некоторых платформах ошибки от async_connect не были правильно распространены до обработчика завершения (#8795).
Исправлена коррекция Windows (встроенная в Boost 1.54), которая происходит, когда несколько потоков работают io_service. Когда происходит ошибка, результат асинхронной операции (ошибка и байты трансферредные) неправильно отбрасывается и вместо этого используются нулевые значения. Для TCP-сокетов это приводит к ложным уведомлениям конечного файла (#8933).
Исправлена ошибка в отслеживании обработчика, где не было правильно распечатать некоторые идентификаторы обработчика (#8808).
Исправлено сравнение, используемое для тестирования на успешные синхронные приемные операции так, чтобы он работал правильно с неподписанными дескрипторами сокета (#8752).
Убедитесь, что номер сигнала правильно передается обработчику завершения при запуске async_wait на сигнале, который уже поднят (#8738).
Подавили g++ 4.8+ предупреждение о неиспользуемых типах (#8980).
Включить оптимизацию движения для обработчиков, использующих крючок вызова по умолчанию (#8624).
Уточняется, что программы не должны выдавать дублирование async_write_at операций (#8669).
Изменение Windows HANDLEERROR_MORE_DATA как нефатальная ошибка при возврате GetOverlappedResult для синхронного чтения (#8722).
Визуальные расширения языка C++ используют generic в качестве ключевого слова. Добавлен обход, который переименовывает пространство имен на cpp_generic, когда эти языковые расширения действуют.
Исправлены некоторые асинхронные операции, которые пропустили получение async_result поддержки в Boost 1.54. В частности, буферные шаблоны потоков были обновлены так, чтобы они придерживались текущих моделей обработчика (#900, #9001).
Включить поддержку Microsoft Visual Studio 2012 (#8959).
Добавлено use_future поддержка Microsoft Visual Studio 2012.
Удалить использование std::min в Windows IOCP-зад, чтобы избежать зависимости от <algorithm> заголовок (#8758).
Устранили ненужные копии обработчика.
Исправлена поддержка старых версий OpenSSL, которые не предоставляют функцию SSL_CTX_clear_options (#9273).
Исправлены различные мелкие и косметические вопросы в коде и документации (включая #8347, #8950, #8953, #8965, #8997, #9230).
Добавлены новые классы признаков, handler_type и async_result, которые позволяют настроить обратный тип инициирующей функции.
Добавлена функция asio::spawn(), высокоуровневая обертка для бега штабелых корутин, основанная на Boost. Библиотека Корутин. Функция spawn() позволяет программам осуществлять асинхронную логику синхронно. Например: size_tn=my_socket.async_read_some(my_buffer,yield); Дополнительные сведения см. в разделе Stackful Coroutines.
Добавлено asio::use_future специальное значение, которое обеспечивает первоклассную поддержку для возврата C++11 std::future от инициирующей функции асинхронной операции. Например: future<size_t>=my_socket.async_read_some(my_buffer,asio::use_future> Дополнительную информацию см. в разделе C++ 2011 Support - Futures.
Способствовал без штабелирования класса и макросов быть частью документального интерфейса Asio, а не частью примера HTTP-сервера 4. Дополнительные сведения см. в разделе Бесплатные корутины.
Добавлен новый крюк обработчика под названием asio_handler_is_continuation. Асинхронные операции могут представлять собой продолжение асинхронного потока управления, связанного с текущим обработчиком-исполнителем. asio_handler_is_continuation крючок может быть настроен для возврата Правда, если это так, и реализация Asio может использовать эти знания для оптимизации расписания нового обработчика. Чтобы охватить общие случаи, Asio настраивает крючок для странд, spawn() и сочиняет асинхронные операции.
Добавлено четыре новых общих класса протокола: generic::datagram_protocol, generic::raw_protocol, timeer::seq_packet_protocol Дополнительные сведения см. в разделе Поддержка для других протоколов.
Добавлены конструкторы движения C++11, которые позволяют преобразовать розетку (или акцептор) в более общий тип. Например, ip::tcp::socket может быть преобразован в generic::stream_protocol::socket> по ходу строительства. Дополнительные сведения см. в разделе Поддержка для других протоколов.
Расширил basic_socket_acceptor<>accept() и async_accept() функции, чтобы новое соединение было принято непосредственно в розетку более общего типа. Например, ip::tcp::acceptor может быть использован для принятия в объект generic::stream_protocol::socket. Дополнительные сведения см. в разделе Поддержка для других протоколов.
Переместили существующие примеры в C++03-специфический каталог и добавили новый каталог для C++11-специфических примеров. Ограниченное подмножество примеров C++03 было преобразовано в их эквиваленты C++11.
Различные улучшения SSL. Спасибо Нику Джонсу, на чьей работе основаны эти изменения.
Добавлена поддержка SSL-руководителей с повторное использование данных, уже прочитанных из провода. Добавлены новые перегрузки sl::stream<> класс handshake() и async_handshake() функции. Они принимают ConstBufferSequence для использования в качестве первоначального ввода в двигатель ssl для процедуры рукопожатия.
Добавлена поддержка создания TLSv1.1 и TLSv1.2 sl::контекст объектов.
Добавлено set_verify_depth() функция sl::context и sl::stream< классы.
Добавлена возможность загрузки SSL-сертификата и ключевых данных из буферов памяти. Новые функции, add_certificate_authority(), use_certificate(), use_certificate_chain(), use_key().
ssl::context автоматически отключить сжатие SSL по умолчанию. Чтобы включить, используйте новый sl::context::clear_options() функция, как в my_context.clear_options(ssl::context_nopression>>>.
Исправлен потенциальный тупик в реализации signal_set.
Исправлена ошибка в примере приемщика в документации #8421.
Исправленные ошибки копирования-отхода в документации официанта #8602.
Добавлены утверждения для удовлетворения некоторых инструментов анализа кода #7739.
Исправлена потенциальная гонка данных в Linux epoll реализации.
Исправлена ошибка Windows, где некоторые операции могут генерировать error_code с недействительным (т.е. NULL) eror_category#8613.
Исправлено basic_waitable_timer лежащее в основе реализации, так что оно может обрабатывать любое значение time_point без переполнения объектов средней продолжительности.
Исправлена проблема с потерянными нитями, которые могут возникнуть при одновременных вызовах run() и poll() на том же io_service объект #8354.
Исправлена реализация асинхронной операции подключения, чтобы она могла справиться с подстегнутыми уведомлениями о готовности от реактора #7961.
Исправлена утечка памяти в sl::rfc2818_verification класс.
Добавлен механизм отключения автоматической инициализации Winsock #3605. Подробнее см. файл заголовка boost/asio/detail/winsock_init.hpp.
Исправлена несовместимость между ip::tcp::iostream и C++11 (#7162).
Декорированные имена атрибутов GCC с подчеркиванием для предотвращения взаимодействия с макросами, определенными пользователем (#6415).
Добавлено недостающее #include<cctype>, необходимое для некоторых версий MinGW.
Изменение использования атомных встроений gcc на процессорах ARM, когда они доступны (#7140).
Измененное разрушение полосы, чтобы быть безоперационным, чтобы позволить, чтобы страндовые объекты были уничтожены после того, как их связанные io_service были уничтожены.
Добавлена поддержка некоторых более новых версий glibc, которые предоставляют функцию epoll_ Create1(), но всегда терпят неудачу с функцией ENOSYS (#7012).
Изменила реализацию SSL, чтобы бросить исключение, если инициализация SSL провалится (#6303).
Исправлена очередная регрессия в buffered_write_stream (#6310).
Реализованы различные незначительные улучшения производительности, в первую очередь ориентированные на платформы Linux x86 и x86-64.
Добавлен новый шаблон класса basic_waitable_timer, основанный на требованиях типа часов C++11. Он может использоваться с часами из C++11 <chrono> библиотечного объекта или, если их нет, Boost. Хроно. Typedefs high_ resolution_timer, steady_timer и system_timer могут использоваться для создания часовых объектов для стандартных типов часов.
Добавлено новое Windows::объект_handle класс для выполнения ожидания на объектах ядра Windows. Спасибо Борису Шалингу за то, что он внес существенный вклад в развитие этой функции.
На Linux connect() может вернуть EAGAIN в определенных обстоятельствах. Переназначил это на другую ошибку, чтобы она не выглядела как операция без блокировки (#6048).
Исправлена регрессия в buffered_write_stream (#6310).
Исправлен нестраничный пул «лист» на Windows, когда io_service неоднократно выполняется без каких-либо действий (#6321).
Перевернутые ранее изменения, чтобы позволить некоторым спекулятивным операциям быть выполненными без сохранения блокировки, так как он ввел расовое состояние в некоторые многослойные сценарии.
Исправлена ошибка, где второй буфер в массиве двух буферов может быть проигнорирован, если первый буфер пуст.
Реализованы различные улучшения производительности, в том числе:
Использование резьбовых очередей операций в однонаправленных случаях использования (т.е. когда конвалютный_хинт 1) для устранения пары блокировки / блокировки.
Позволяет выполнять некоторые epoll_reactor спекулятивные операции без сохранения блокировки.
Улучшение локальности отсчета путем выполнения операции epoll_reactor I/O непосредственно перед вызовом соответствующего обработчика. Это также улучшает масштабируемость процессоров, когда несколько потоков работают io_service.
Специальные асинхронные операции чтения и записи для буферных последовательностей, которые являются массивами (boost::array или std::array) из двух буферов.
Исправлена ошибка компиляции в перегрузке regex async_read_until (#568).
Исправлена ошибка компиляции, специфичная для Windows, путем прямого указания функции signal() из глобального пространства имен (#5722).
Изменение deadline_timer реализация так, что она не читает часы, если таймер не пуст.
Изменили размеры буферов потока SSL, чтобы они были достаточно большими, чтобы иметь полную запись TLS (#5854).
Исправлено поведение синхронных null_buffers операций, так что они подчиняются неблокировке пользователя (#5756).
Изменено, чтобы установить размер выбора fd_set при использовании Windows.
Отключено предупреждение MSVC из-за квалификационного отбора конусов, применяемых к типу функции.
Исправлено столкновение, которое происходит при использовании компилятора Intel C++ (#5763).
Изменение инициализации библиотеки OpenSSL таким образом, чтобы она поддерживала все доступные алгоритмы.
Исправлено отображение ошибок SSL, используемое, когда сеанс изящно закрыт.
Добавлены некоторые программы тестирования задержки.
Уточняется, что операция чтения заканчивается, когда буфер заполнен (#5999).
Исправлена проблема безопасности исключения в epoll_reactor инициализация (#6006).
Сделали количество трансляций, настраиваемых путем определения BOOST_ASIO_STRAND_IMPLEMENTATIONS до нужного числа.
Добавлена поддержка нового BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION флаг, который переключает распределение трансляций на использование круглого роубинного подхода, а не хэширования.
Исправлена проблема потенциального голодания, которая может возникнуть при использовании strand.post().
Добавлена поддержка для обработки сигналов, используя новый класс под названием signal_set. Программы могут добавить один или несколько сигналов к набору, а затем выполнить операцию async_wait(). Указанный обработчик будет называться, когда произойдет один из сигналов. Один и тот же номер сигнала может быть зарегистрирован с несколькими объектами signal_set, однако номер сигнала должен использоваться только с Asio. Адреса #2879.
Добавлено отслеживание обработчика, новое средство отладки. При включении определения BOOST_ASIO_ENABLE_HANDLER_TRACKING, Асио пишет отладку выхода к стандартному потоку ошибок. Результаты отражают асинхронные операции и отношения между их обработчиками. Он может быть обработан после обработки с использованием включенного инструмента handlerviz.pl для создания визуального представления обработчиков (требует GraphViz).
Добавлена поддержка тайм-аутов на разъемных iostreams, таких как ip::tcp::iostream. Таймаут установлен путем вызова expires_at() или expires_from_now() для установления предельного срока. Любые операции с розеткой, которые происходят за крайний срок, поместят iostream в плохое состояние.
Добавлена новая функция error() для извлечения кода ошибки из последнего системного вызова.
Добавлена новая basic_deadline_timer::cancel_one() функция. Эта функция позволяет вам отменять одного официанта на таймере. Ремесло аннулируется в приказе FIFO.
Добавлено новое transfer_exactly() условие завершения. Это может быть использовано для отправки или получения определенного количества байтов, даже если общий размер буфера (или буферной последовательности) больше.
Добавлены новые бесплатные функции connect() и async_connect(). Эти операции пробуют каждую точку в списке, пока розетка не будет успешно подключена, и полезны для создания TCP-клиентов, которые работают как с IPv4, так и с IPv6.
Расширил функцию buffer_size(), чтобы она работала для буферных последовательностей в дополнение к отдельным буферам.
Добавлена новая функция buffer_copy(), которая может быть использована для копирования первичных байтов между отдельными буферами и буферными последовательностями.
Добавлены новые перегрузки read(), read_at(), write() и write_at(), которые не требуют условия завершения.
Добавлены ошибки компилятора, когда обработчик завершения не отвечает необходимым требованиям типа. Когда C++0x доступен (в настоящее время поддерживается для g++ 4.5 или позже и MSVC 10), static_assert также используется для создания информационного сообщения об ошибке. Эта проверка может быть отключена путем определения BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS.
Добавлена новая, полностью переписанная реализация SSL. Новая реализация компилируется быстрее, показывает существенно улучшенную производительность и поддерживает пользовательское распределение памяти и вызов обработчика. Он включает в себя новые функции API, такие как отказы в проверке сертификатов и улучшенная отчетность об ошибках. Новая реализация является исходной-совместимой со старым для большинства применений. Однако, при необходимости, старая реализация может все еще использоваться путем определения BOOST_ASIO_ENABLE_OLD_SSL. Адреса #3702, #3958.
Изменение отдельной поддержки компиляции таким образом, что для использования возможностей Asio's SSL, вы также должны включать boost/asio/sl/impl/src.hpp в одном исходном файле в вашей программе.
Изменение реализации SSL для поддержки создания среды, где SSL v2 явно отключен (#5453).
Сделано is_loopback(), is_unspecified() и is_multicast() функции, последовательно доступные по ip:: Адрес>>>>><>>.
Добавлена новая функция non_blocking() для управления неблокирующим поведением сокета или дескриптора. io_control() команды, названные non_blocking_io, теперь обесценены в пользу этих новых функций.
Добавлена новая функция native_non_blocking() для управления неблокирующим режимом основного сокета или дескриптора. Эти функции предназначены для того, чтобы позволить инкапсуляцию произвольных неблокирующих систем вызовов как асинхронных операций, таким образом, что является прозрачным для пользователя объекта сокета. Функции не влияют на поведение синхронных операций сокета или дескриптора.
Добавлена функция io_control() для акцептов (#3297).
Добавлена функция release() для posix-дескрипторов. Эта функция высвобождает право собственности на основной дескриптор для звонящего. Адреса #3900.
Добавлена поддержка секвенированных пакетов (SOCK_SEQPACKET).
Добавлена новая функция io_service::остановка() функция, которая может быть использована для определения того, прекратился ли io_service (т.е. reset() call необходим перед любыми дальнейшими вызовами run(),_runone>>>><>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
Для последовательности с стандартной библиотекой C++0x депрецировал native_type typedefs в пользу native_handle_type, и native() функции члена в пользу native_handle().
Добавлена поддержка конструкции перемещения C++0x и назначения в розетки, серийные порты, дескрипторы POSIX и ручки Windows.
Снижение копирования объектов функции обработчика.
Добавлена поддержка C++0x для дальнейшего сокращения (и в некоторых случаях устранения) копирования объектов обработчика.
Добавлена поддержка системного звонка fork(). Программы, использующие fork(), должны звонить io_service.notify_fork() в соответствующее время. Добавлены два новых примера, показывающих, как использовать эту функцию. Адреса #3238, #4162.
Очищено обращение с ошибками, сообщаемыми Close() системный звонок. В частности, предположим, что большинство операционных систем не будут иметь Close(), но если он установит режим блокировки и перезапустит вызов. Если происходит какая-либо другая ошибка, предположим, что дескриптор закрыт. Адреса #3307.
Добавлено новое asio::buffer() перегрузка для std::array, когда доступно.
Изменение реализации для использования стандартных шаблонов библиотеки C++0x array, shared_ptr, weak_ptr и atomic, когда они доступны, а не эквиваленты Boost.
Используйте шаблоны C++0x, когда они доступны, вместо того, чтобы генерировать перегрузки функций с помощью Boost. Препроцессор.
Изменена информация об исключениях, чтобы включить имя функции в исключение what() сообщения.
Исправлено недостаточное предупреждение инициаторов с MinGW.
shutdown_service() функции-члены должны быть частными.
Добавлены архетипы для тестирования функций опции розетки.
Переменил буст. Asio примеры, чтобы они не использовали Boost. Удобный заголовок Thread. Вместо этого используйте файл заголовка, который предназначен специально для класса хлеб.
Устранили зависимость от ОС-предоставленных макросов для известных IPv4 и IPv6 адресов. Это должно устранить раздражающие «пропускные брекеты вокруг инициализаторов» предупреждения (#3741).
Сократили размер ip::basic_endpoint<> объектов (таких как ip::tcp::endpoint и ip::p.
Изменение реактора подтверждает предположение, что любые дескрипторы или розетки, добавленные с использованием assign(), возможно, были dup()-ed, и поэтому требуют явной регистрации от реактора (#4971).
Вместо этого следует использовать функции io_service().
Удалены депрецированные типы resolver_query и resolver_iterator из ip::tcp, ip::dp и ip::icmp классы.
Модифицированы buffers_iterator<> и ip::basic_resolver_iterator классы так, чтобы значения_typedefs были неконстантными байтами.
Fixed warnings reported by g++'s -Wshadow compilationr option (#3905).
Добавлен явный гипс для конвертации FIONBIO постоянного в int, для подавления предупреждения компилятора на некоторых платформах (#5128).
Изменили большинство примеров для того, чтобы рассматривать неудачу с помощью приемной операции как нефатальную (#5124).
Исправлена ошибка в примере tick_count_timer, сделав подписанный тип продолжительности. Раньше ожидание уже пройденного срока не возвращалось бы очень долго (#5418).
EV_ONESHOT, по-видимому, вызывает проблемы на некоторых версиях Mac OS X, с io_service деструктор застрял внутри Close() системный звонок. Изменил спинку kqueue для использования EV_CLEAR вместо этого (#5021).
Исправленные сбои компиляции с некоторыми версиями g++ из-за использования анонимных энумов (#4883).
Исправлена ошибка на квайных платформах, где некоторые системные вызовы, которые неоднократно терпят неудачу с EWOULDBLOCK, не правильно перезаписываются с кью.
Изменение asio::streambuf, чтобы убедиться, что его внутренние указатели обновляются правильно после изменения данных с использованием std::streambuf.
Исправлена ошибка, которая помешала варианту linger сокета работать на платформах, отличных от Windows.
Исправлена проблема полного перелива, которая возникает при ip::address_v4::broadcast() используется на 64-битных платформах.
Исправлена проблема на старых ядрах Linux (где epoll используется без поддержки Timerfd), которая предотвращает своевременную доставку обработчиков с описателем с крайним сроком на некоторое время (#5045).
Добавлена поддержка управления аппаратным потоком на QNX (#4625).
Всегда используйте pselect() на HP-UX, если он доступен (#4578).
Доверенные аргументы обработчика передаются как значения (#4744).
Фиксированная Windows сборка, когда резьба отключена (#4680).
Исправлена специфическая для Windows проблема, когда deadline_timer объекты со временем истечения срока действия, установленным более 5 минут в будущем, могут никогда не истечь (#4745).
Исправлено resolver backend на платформах BSD, так что пустое имя обслуживания решается на номер порта 0, согласно документации (#4690).
Исправлены операции чтения, чтобы они не принимали буферные последовательности типа const_buffers_1 (#4746).
Протокол и id, чтобы избежать столкновения с ключевыми словами Objective-C++ (#4191).
Исправлена проблема производительности vector, которая может возникнуть при наличии множества активных deadline_timer объектов (#4780).
Исправлена поддержка kqueue, чтобы она компилировалась на NetBSD (#4662).
Исправлен розетка io_control() реализация на 64-битных платформах Mac OS X и BSD (#4782).
Исправлена специфическая для Windows проблема, когда сбои от accept() неправильно воспринимаются как успехи (#4859).
Депрекрасно <src.cpp> в пользу </src/cpp>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
Сокращение времени компиляции. (Учтите, что некоторым программам может потребоваться добавить дополнительные #includes, например, если программа использует boost::array, но не включает в себя <boost/array.hpp>.)
Уменьшение размера сгенерированного кода.
Refactored deadline_timer реализация для повышения производительности.
Улучшена многопроцессорная масштабируемость на Windows, используя выделенную скрытую нить для ожидания таймеров.
Улучшение производительности asio::streambuf с async_read() и async_read_until(). Эти читаемые операции теперь используют существующую емкость streambuf при чтении, а не ограничивают считывание до 512 байт.
Добавлена факультативная отдельная компиляция. Чтобы включить, добавить #include<boost/asio/impl/src.cpp> к одному исходному файлу в программе, затем построить программу с BOOST_ASIO_SEPARATE_COMPILATION, определенными в настройках проекта/comper. В качестве альтернативы: BOOST_ASIO_DYN_LINK может быть определено для создания отдельно скомпилированного Asio как часть общей библиотеки.
Добавлен новый макро BOOST_ASIO_DISABLE_FENCED_BLOCK, чтобы разрешить отключение заборов памяти вокруг обработчиков, даже если поддержка потока включена.
Переработанные примеры таймаута, чтобы лучше проиллюстрировать типичные случаи использования.
Убедитесь, что аргументы обработчика передаются как типы const.
Исправлен некорректный порядок параметров в null_buffers вариант async_send_to (#4170).
Гарантированный Неподписанныйхар используется с цифром в getaddrinfo эмуляция (#4201).
Исправлена обработка очень маленьких, но ненулевых таймаутов (#4205).
Исправленный крушение, которое произошло, когда пустая буферная последовательность была передана в составную операцию чтения или записи.
Добавлено недостающее оператор+ перегрузка в buffers_iterator (#4382).
Реализована отмена null_buffers операций на Windows.
Расширили гарантию того, что фоновые потоки не называют пользовательский код для всех асинхронных операций (#3923).
Изменился, чтобы использовать кромки на Linux.
Изменение использования timerfd для отправки таймеров на Linux, когда это доступно.
Изменение использования одношотовых уведомлений с kqueue на платформах Mac OS X и BSD.
Добавлен битмасовый тип ip::resolver_query_base::flags согласно предложению TR2. Этот тип предотвращает имплицитное преобразование от int до flags, что позволяет компилятору ловить случаи, когда пользователи неправильно передают числовой номер порта в качестве имени сервиса.
Добавлено #defineNOMINMAX для всех компиляторов Windows. Пользователи могут определить BOOST_ASIO_NO_NOMINMAX для подавления этого определения (#3901).
Исправлена ошибка, где 0-байтные асинхронные чтения неправильно передавали error::eof результат к обработчику завершения (#4023).
Изменение io_control() функции-члены всегда называют ioctl на главном дескрипторе при изменении режима блокировки (#3307).
Изменение реализации рефрижератора на более длительный срок требует типдефа InternetProtocol::resolver_query и InternetProtocol::resolver_iterator, поскольку ни один тип не является частью задокументированных InternetProtocol требований. Соответствующие типдепы в ip::tcp, ip::dp и ip::icmp классы были обесценены.
Исправленная обработка вне диапазона для реакторов, не основанных на select().
Добавлен новый BOOST_ASIO_DISABLE_THREADS макро, который позволяет резьбовой поддержке Asio быть независимо отключенным.
Добавлен новый пример HTTP Server 4, иллюстрирующий использование бес штабелированных корутин с Asio.
Изменение распределения обработчика и ссылки на использование boost::addressof для получения адреса объектов обработчика, а не для нанесения оператор& непосредственно (#297).
Ограничение отладки буфера MSVC до 2008 года, так как оно вызывает крушение с бета-2 2010 (#3796, #3822).
Исправлена проблема со сроком службы памяти обработчика, где Windows нуждается в структуре OVERLAPPED, чтобы быть в силе до тех пор, пока не вернется инициаторный вызов функции и не будет доставлен пакет завершения.
Не блокируйте сигналы при выполнении системных вызовов, но вместо этого перезапустите звонки, если они прерываются.
Documented the guarantee made by strand objects with respect to order of handler invok.
Изменились полосы для использования пула реализаций, чтобы сделать копирование полос дешевле.
Убедитесь, что поддержка kqueue включена для платформ BSD (#3626).
Добавлен префикс boost_ к префиксу extern"C" функция входной точки потока (#3809).
В getaddrinfo эмуляция, только проверить тип розетки (SOCK_STREAM или SOCK_DGRAM), если указано имя сервиса. Это должно позволить эмуляции работать с сырыми розетками.
Добавлен обход для некоторых сломанных брандмауэров Windows, которые делают розетку похожей на 0.0.0.0, когда она фактически связана с 127.0.0.1.
Приложено исправление для сообщения о чрезмерном использовании процессора в Solaris (#3670).
Добавлена поддержка платформ, использующих старые компиляторы, такие как g++ 2.95 (#3743).
Добавлен новый пример пинга, чтобы проиллюстрировать использование розеток ICMP.
Изменение buffered*_stream<> шаблоны для обработки 0-байт считывает и пишет как no-ops, чтобы соответствовать задокументированным требованиям типа для SyncReadStream, AsyncReadStream, SyncWriteStream и AsyncWStream>.
Изменение некоторых случаев throw ключевое слово на boost::throw_исключение(), чтобы позволить использовать Asio, когда поддержка исключения отключена. Обратите внимание, что обертывания SSL по-прежнему требуют поддержки исключений (#2754).
Made Asio совместим с бета-версией OpenSSL 1.0 (#3256).
Исключили избыточный системный вызов в Solaris /dev/poll.
Исправлена ошибка в переделке ведерного массива во внутренних хэш-картах (#3095).
Обеспечить правильное распространение кода ошибки, когда синхронный прием терпит неудачу (#3216).
Обеспечить правильное распространение кода ошибки, когда синхронное чтение или запись на Windows HANDLE не удается.
Исправленные сбои, зарегистрированные при определении _GLIBCXX_DEBUG (#3098).
Исправленная пользовательская поддержка распределения памяти для таймеров (#3107).
Добавлены различные предупреждения, сообщаемые g++ (#1341, #2618).
Различные улучшения документации, включая более очевидные гиперссылки для функции перегрузок, информацию о заголовке файла, примеры для требований типа обработчика, и добавление значений энума в индекс (#3157, #2620).
Внедрить автоматическую ретрансляцию ведерного массива во внутренних хэш-картах. Это для улучшения производительности для очень большого количества асинхронных операций, а также для сокращения использования памяти для очень небольших чисел. Новый макрос BOOST_ASIO_HASH_MAP_BUCKETS может использоваться для настройки размеров, используемых для ведерных массивов. (N.B. эта функция представила жучок, который был зафиксирован в Asio 1.4.3 / Boost 1.40.)
Добавить оптимизацию производительности для Windows IOCP-бэкда для когда не используются таймеры.
Предотвратить локальные настройки от изменения форматирования конечных точек TCP и UDP (#2682).
Исправьте утечку памяти, которая произошла, когда обработчик завершения асинхронной операции SSL бросил исключение (#2910).
Исправьте реализацию io_control(), чтобы она соответствовала задокументированным требованиям типа для IoControlCommand (#2820).
Fix несовместимость между Asio и ncurses.h (#2156).
На Windows, особенно обрабатывайте случай, когда дублирование ReadFile вызывает не удается с ERROR_MORE_DATA. Это позволяет взломать, где Windows::stream_handle может быть использован с ориентированной на сообщение трубой (#2936).
Исправление системных вызовов, чтобы всегда очистить ошибку на успехе, так как POSIX позволяет успешным системным вызовам изменять errno (#2953).
Не включать termios.h, если BOOST_ASIO_DISABLE_SERIAL_PORT определено (#2917).
Очищено несколько предупреждений уровня 4 MSVC (#2828).
Усовершенствованная концепция Завершения с подписью size_tКондиция слияния(error_codeec,size_ttotal), где значение возврата указывает на максимальное количество байтов, которые должны быть перенесены на следующую операцию чтения или записи. (Древняя подпись «Кондиция завершения» по-прежнему поддерживается для обратной совместимости).
Новые окна:: overlapped_ptr класс, чтобы позволить произвольно перекрывать функции I/O (например, TransmitFile) для использования с Asio.
На последних версиях Linux теперь используется дескриптор Eventfd (а не труба), чтобы прерывать заблокированный реактор для выбора / подачи.
Добавлены перегрузки с наименьшим значением _layer().
Синхронные операции чтения, записи, принятия и подключения теперь безопасны (что означает, что теперь разрешено выполнять одновременные синхронные операции на отдельном розетке, если поддерживается ОС).
Реакторные реализации io_service теперь используют ленивую инициализацию, чтобы уменьшить использование памяти объекта io_service, используемого только в качестве очереди сообщений.
Добавлены обертывания для POSIX-ориентированных файловых дескрипторов (за исключением обычных файлов).
Добавлены обертывания для Windows, ориентированных на поток HANDLE, такие как названные трубы (требования HANDLE, которые работают с портами завершения I/O).
Добавление оберток для случайного доступа Windows HANDLE такие как файлы (требования HANDLE, которые работают с портами завершения I/O).
Добавлена поддержка операций в стиле реактора (т.е. они сообщают о готовности, но не выполняют I/O), используя новый тип null_buffers.
Добавлен итераторный тип для байтовой траектории буферных последовательностей.
Добавлены новые read_until() и async_read_until() перегрузки, которые принимают определяемый пользователем объект функции для определения границ сообщений.
Добавлена экспериментальная очередь с двумя блоками (с помощью определения BOOST_ASIO_ENABLE_TWO_LOCK_QUE), которая может обеспечить лучшее io_service масштабируемость для многих процессоров.
Различные исправления, улучшения производительности и более полный охват поддержки распределения пользовательской памяти.
Статья Revision History раздела Boost.Asio Boost.Asio может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.