2
0
mirror of https://github.com/boostorg/asio.git synced 2026-02-23 14:02:13 +00:00
Commit Graph

1306 Commits

Author SHA1 Message Date
Christopher Kohlhoff
ff58013a23 Update copyright notices. 2022-03-02 21:23:52 +11:00
Christopher Kohlhoff
3966a24bae Version bump. 2021-12-02 10:02:56 +11:00
Christopher Kohlhoff
44eb830ee1 Fix awaitable move operator return value. 2021-12-02 08:55:47 +11:00
Christopher Kohlhoff
c95ce94d39 Make awaitable_operators.hpp self contained
It was missing `asio/co_spawn.hpp`
2021-12-02 08:54:38 +11:00
Christopher Kohlhoff
a493ddf11b Use default 'new' alignment, if available.
Fixes an access violation when using coroutines with MSVC and x64
targets, due to misaligned coroutine frames.
2021-12-01 00:07:45 +11:00
Christopher Kohlhoff
723a72bfc9 Eliminate shared_ptr from coro co_spawn() implementation. 2021-12-01 00:07:15 +11:00
Christopher Kohlhoff
0d807a8c47 Prevent async_resume from being called on coro temporaries. 2021-12-01 00:06:47 +11:00
Christopher Kohlhoff
a4af0eac25 Fix any_io_executor with BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT.
Commit 98f58ee has overlooked the case of `any_io_executor` being a
typedef to `executor` (when `BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT` is
defined) instead of a proper class, resulting in compilation errors.
2021-11-17 08:42:36 +11:00
Christopher Kohlhoff
842ca6e3e5 Work around header inclusion order problem when io_uring is enabled. 2021-11-17 08:42:18 +11:00
Christopher Kohlhoff
ab630c73d1 Fix shutdown cleanup issue in experimental::parallel_group. 2021-11-17 08:42:06 +11:00
Christopher Kohlhoff
e50201f38d Add missing move assignment operator to awaitable<>. 2021-11-17 08:39:36 +11:00
Christopher Kohlhoff
59dde8e8ea Fix bind_executor so that it doesn't require a token to provide legacy async_result support. 2021-11-17 08:38:11 +11:00
Christopher Kohlhoff
6f061b94c6 Include library and function in ssl error strings. 2021-11-17 08:37:44 +11:00
Christopher Kohlhoff
d5f201b5d4 Fully qualify use of asio::error namespace. 2021-11-17 08:37:27 +11:00
Christopher Kohlhoff
8da75d0109 Fix linked list corruption in channel cancel/close handling. 2021-11-17 08:36:03 +11:00
Christopher Kohlhoff
6921e4c65c Add missing destructors. 2021-11-17 08:35:52 +11:00
Christopher Kohlhoff
1f379847de Version bump. 2021-11-04 02:00:17 +11:00
Christopher Kohlhoff
495e6367af Add experimental support for channels.
This adds experimental::channel and experimental::concurrent_channel.
Channels may be used to send completions as messages. For example:

  // Create a channel with no buffer space.
  channel<void(error_code, size_t)> ch(ctx);

  // The call to try_send fails as there is no buffer
  // space and no waiting receive operations.
  bool ok = ch.try_send(asio::error::eof, 123);
  assert(!ok);

  // The async_send operation blocks until a receive
  // operation consumes the message.
  ch.async_send(asio::error::eof, 123,
      [](error_code ec)
      {
        // ...
      });

  // The async_receive consumes the message. Both the
  // async_send and async_receive operations complete
  // immediately.
  ch.async_receive(
      [](error_code ec, size_t n)
      {
        // ...
      });
2021-11-04 01:56:32 +11:00
Christopher Kohlhoff
f6d7f83065 Fix clang-11 compile error when io_uring is enabled. 2021-11-04 01:47:40 +11:00
Christopher Kohlhoff
5b72b72b72 Improvements to asio::experimental::coro.
* Added overload so member functions can provide an explicit executor.
* Added co_spawn for coro tasks.
* Added reference and overview documentation.
* Adopted awaitable cancellation model.
* Refactored implementation.
2021-11-04 01:41:25 +11:00
Christopher Kohlhoff
d6d69d87bb Disable aligned_alloc on clang when using MSVC runtime. 2021-11-04 01:35:42 +11:00
Christopher Kohlhoff
46c729aa28 Use faster implementation for network_v4::canonical(). 2021-11-04 01:35:30 +11:00
Christopher Kohlhoff
c1a0c6a124 Fix gcc shadow warnings. 2021-11-04 01:35:20 +11:00
Christopher Kohlhoff
12deb90e5f Remove spurious include. 2021-11-04 01:35:04 +11:00
Christopher Kohlhoff
5a706991b5 Add missing file synchronisation functions. 2021-11-04 01:34:52 +11:00
Christopher Kohlhoff
d8359719e1 Add support for registered buffers.
The mutable_registered_buffer and const_registered_buffer classes are
buffer sequence types that represented registered buffers. These buffers
are obtained by first performing a buffer registration:

  auto my_registration =
    asio::register_buffers(
        my_execution_context,
        my_buffer_sequence);

The registration object must be maintained for as long as the buffer
registration is required. The supplied buffer sequence represents the
memory location or locations that will be registered, and the caller
must ensure they remain valid for as long as they are registered. The
registration is automatically removed when the registration object is
destroyed. There can be at most one active registration per execution
context.

The registration object is a container of registered buffers. Buffers
may be obtained from it by iterating over the container, or via direct
index access:

  asio::mutable_registered_buffer my_buffer
    = my_registration[i];

The registered buffers may then be passed directly to operations:

  asio::async_read(my_socket, my_buffer,
      [](error_code ec, size_t n)
      {
        // ...
      });

Buffer registration supports the io_uring backend when used with read
and write operations on descriptors, files, pipes, and sockets.
2021-10-29 20:54:56 +11:00
Christopher Kohlhoff
55eb04e646 Enable io_uring backend for pipes. 2021-10-29 20:51:06 +11:00
Christopher Kohlhoff
d81275f402 Only use io_uring for sockets if it's the default backend. 2021-10-29 20:50:49 +11:00
Christopher Kohlhoff
64fff52244 Only use io_uring for descriptors if it's the default backend. 2021-10-29 20:50:25 +11:00
Christopher Kohlhoff
8929b99528 Add missing documentation for parameter. 2021-10-27 13:50:32 +11:00
Christopher Kohlhoff
028630b0f8 Add support for portable pipes.
This change add supports for pipes on POSIX and Windows (when I/O
completion ports are available). For example, to create and use a
connected pair of pipe objects:

  asio::readable_pipe read_end;
  asio::writable_pipe write_end;
  asio::connect_pipe(read_end, write_end);

  write_end.async_write_some(my_write_buffer,
      [](error_code e, size_t n)
      {
        // ...
      });

  read_end.async_read_some(my_read_buffer,
      [](error_code e, size_t n)
      {
        // ...
      });
2021-10-27 13:47:03 +11:00
Christopher Kohlhoff
c6b9f33dcf Add support for files.
This change adds support for stream-oriented and random-access files.
For example, to write to a newly created stream-oriented file:

  asio::stream_file file(
      my_io_context, "/path/to/file",
      asio::stream_file::write_only
        | asio::stream_file::create
        | asio::stream_file::truncate);

  file.async_write_some(my_buffer,
      [](error_code e, size_t n)
      {
        // ...
      });

or to read from a random-access file:

  asio::random_access_file file(
      my_io_context, "/path/to/file",
      asio::random_access_file::read_only);

  file.async_read_some_at(1234, my_buffer,
      [](error_code e, size_t n)
      {
        // ...
      });

This feature currently supports I/O completion ports on Windows, and
io_uring on Linux (define BOOST_ASIO_HAS_IO_URING to enable).
2021-10-25 12:15:08 +11:00
Christopher Kohlhoff
292dcdcb94 Add io_uring backend.
Added support for using io_uring as the backend for all I/O objects,
including sockets, timers, and posix descriptors.

This backend is disabled by default, and must be enabled by defining
both BOOST_ASIO_HAS_IO_URING and BOOST_ASIO_DISABLE_EPOLL.

(Note: Simply defining BOOST_ASIO_HAS_IO_URING alone will enable the
backend without using it for the existing I/O objects. This allows it
to be used for I/O objects that require io_uring support, such as
files.)

This support depends on the liburing library at both compile and link
time. Add '-luring' to your list of libraries for linking.
2021-10-25 12:12:43 +11:00
Christopher Kohlhoff
70d12f5ebf Decouple the scheduler from the concrete task type. 2021-10-25 11:58:37 +11:00
Christopher Kohlhoff
f6186d659c Revert "Don't use shared_ptr in basic_socket_streambuf implementation." 2021-10-25 11:58:19 +11:00
Christopher Kohlhoff
7324fd94db Increase small object buffer size for any_executor. 2021-10-25 11:58:01 +11:00
Christopher Kohlhoff
4e405c2018 Reduce size of io_context executors to a single pointer. 2021-10-25 11:57:14 +11:00
Christopher Kohlhoff
f90ce170d5 Fix multi-signature handling when variadic templates are disabled. 2021-10-17 11:10:23 +11:00
Christopher Kohlhoff
9e220ac0c9 Add execution::is_executor<> specialisations for non-executors. 2021-10-17 11:09:57 +11:00
Christopher Kohlhoff
66ae046410 Add empty explicit specialisation of is_valid_target_executor<int, ...>. 2021-10-17 11:09:33 +11:00
Christopher Kohlhoff
a6c9608985 Enable separate compilation for cancellation_signal/slot. 2021-10-17 11:09:20 +11:00
Christopher Kohlhoff
98f58eec1f Enable separate compilation for any_io_executor. 2021-10-17 11:08:58 +11:00
Christopher Kohlhoff
737a2a0aa9 Don't use shared_ptr in basic_socket_streambuf implementation. 2021-10-17 11:05:21 +11:00
Christopher Kohlhoff
676b450e41 Add empty explicit specialisation composed_work_guard<system_executor>. 2021-10-17 11:04:48 +11:00
Christopher Kohlhoff
58050a2036 Enable ASIO_HAS_STD_INVOKE_RESULT with libc++13.
In c++20 mode std::result_of has been retired as per the standard,
causing compile errors.
2021-10-17 11:04:33 +11:00
Christopher Kohlhoff
bb05560d61 Disable non-virtual destructor warning on MSVC. 2021-10-17 11:04:17 +11:00
Christopher Kohlhoff
a8b564de46 Fix the initialisation order of members.
Reorder the constructor list in `win_iocp_socket_accept_op`, so that
`proxy_op` comes before `cancel_requested`, matching the order in which
these members are declared.

This addresses a warning that members are constructed out-of-order.
2021-10-17 11:03:58 +11:00
Christopher Kohlhoff
38e4883c21 Fix typo in io_context documentation (overlaod -> overload). 2021-10-17 11:03:31 +11:00
Christopher Kohlhoff
e2c30f4455 Fix compilation on Solaris. 2021-10-17 11:02:55 +11:00
Christopher Kohlhoff
138ff6f68f Fix defence against macros defined by Qt on MSVC. 2021-10-17 11:02:39 +11:00