Opened 13 years ago
Closed 11 years ago
#3939 closed Feature Requests (fixed)
Determination on wither ip::address is a multicast address
Reported by: | Owned by: | chris_kohlhoff | |
---|---|---|---|
Milestone: | To Be Determined | Component: | asio |
Version: | Boost 1.42.0 | Severity: | Problem |
Keywords: | Asio multicast | Cc: |
Description
An ip::address can be created by either an IPv4 or IPv6 address. Once created the address is used for subsequent asio classes and function calls independently of the original format of the IP address. It is not currently possible to ask the class if the address is a multicast address. This means a user must determine the format of the address and then call "is_multicast" on the underlying class. In the "boost_asio/example/multicast/receiver.cpp" example, there isn't a way to validate if the receiver class was passed a multicast address, for the "join_group" function, without accessing the underlying IP type.
Both the ip::address_v4 and ip::address_v6 classes can tell if the IP address is a multicast address. I suggest placing a "is_multicast" function in the ip::address class that calls the underlying class's "is_multicast" function.
Change History (3)
comment:1 by , 13 years ago
Milestone: | Boost 1.43.0 → To Be Determined |
---|
comment:2 by , 12 years ago
(In [69194]) Changes for asio version 1.5.0:
- Added support for timeouts on socket iostreams, such as ip::tcp::iostream. A timeout is set by calling expires_at() or expires_from_now() to establish a deadline. Any socket operations which occur past the deadline will put the iostream into a bad state.
- Added a new error() member function to socket iostreams, for retrieving the error code from the most recent system call.
- Added a new basic_deadline_timer::cancel_one() function. This function lets you cancel a single waiting handler on a timer. Handlers are cancelled in FIFO order.
- Added a new transfer_exactly() completion condition. This can be used to send or receive a specified number of bytes even if the total size of the buffer (or buffer sequence) is larger.
- Added new free functions connect() and async_connect(). These operations try each endpoint in a list until the socket is successfully connected.
- Extended the buffer_size() function so that it works for buffer sequences in addition to individual buffers.
- Added a new buffer_copy() function that can be used to copy the raw bytes between individual buffers and buffer sequences.
- Added new non-throwing overloads of read(), read_at(), write() and write_at() that do not require a completion condition.
- Added friendlier compiler errors for when a completion handler does not meet the necessary type requirements. When C++0x is available (currently supported for g++ 4.5 or later, and MSVC 10), static_assert is also used to generate an informative error message. Checking may be disabled by defining BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS.
- Made the is_loopback(), is_unspecified() and is_multicast() functions consistently available across the ip::address, ip::address_v4 and ip::address_v6 classes. Refs #3939.
- Added new non_blocking() functions for managing the non-blocking behaviour of a socket or descriptor. The io_control() commands named non_blocking_io are now deprecated in favour of these new functions.
- Added new native_non_blocking() functions for managing the non-blocking mode of the underlying socket or descriptor. These functions are intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The functions have no effect on the behaviour of the synchronous operations of the socket or descriptor. Refs #3307.
- Added the io_control() member function for socket acceptors. Refs #3297.
- For consistency with the C++0x standard library, deprecated the native_type typedefs in favour of native_handle_type, and the native() member functions in favour of native_handle().
- Added a release() member function to posix descriptors. This function releases ownership of the underlying native descriptor to the caller. Refs #3900.
- Added support for sequenced packet sockets (SOCK_SEQPACKET).
- Added a new io_service::stopped() function that can be used to determine whether the io_service has stopped (i.e. a reset() call is needed prior to any further calls to run(), run_one(), poll() or poll_one()).
- Reduced the copying of handler function objects.
- Added support for C++0x move construction to further reduce copying of handler objects. Move support is enabled when compiling in -std=c++0x mode on g++ 4.5 or higher, or when using MSVC10.
- Removed the dependency on OS-provided macros for the well-known IPv4 and IPv6 addresses. This should eliminate the annoying "missing braces around initializer" warnings. Refs #3741.
- Reduced the size of ip::basic_endpoint<> objects (such as ip::tcp::endpoint and ip::udp::endpoint).
- Changed the reactor backends to assume that any descriptors or sockets added using assign() may have been dup()-ed, and so require explicit deregistration from the reactor. Refs #4971.
- Changed the SSL error category to return error strings from the OpenSSL library.
- Changed the separate compilation support such that, to use Asio's SSL capabilities, you should also include 'asio/ssl/impl/src.hpp in one source file in your program.
- Removed the deprecated member functions named io_service(). The get_io_service() member functions should be used instead.
- Removed the deprecated typedefs resolver_query and resolver_iterator from the ip::tcp, ip::udp and ip::icmp classes.
- Fixed a compile error on some versions of g++ due to anonymous enums. Refs #4883.
- Added an explicit cast to the FIONBIO constant to int to suppress a compiler warning on some platforms. Refs #5128.
- Fixed warnings reported by g++'s -Wshadow compiler option. Refs #3905.
comment:3 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Fixed on release branch in [72428].
Will look at next time I'm making changes to Asio's public interface.