# 0.6.3 * Added support for wasm32-wasip2. * Added `Socket::(set_)ip_transparent_v6`. * Added `Socket::set_tcp_ack_frequency`. * Support windows-sys v0.61 in addition to v0.60. **POTENTIALLY BREAKING** The MSRV of windows-sys v0.61 is 1.71. To use socket2 with its MSRV of 1.70, please downgrade windows-sys to v0.60.x. This can be done using: `cargo update windows-sys --precise 0.60.2` # 0.6.2 * `MsgHdr` and `MsgHdrMut` are marked as transparent meaning both have the same layout as `msghdr` on Unix and `WSAMSG` on Windows (https://github.com/rust-lang/socket2/pull/635). * Don't set `SO_NOSIGPIPE` when accepting sockets, this is inherited from the parent socket (https://github.com/rust-lang/socket2/pull/632). * Fixes `Socket::tcp_notsent_lowat` by using the correct argument type (https://github.com/rust-lang/socket2/pull/622). # 0.6.1 ## Added * Added support for Windows Registered I/O (RIO) (https://github.com/rust-lang/socket2/pull/604). * Added support for `TCP_NOTSENT_LOWAT` on Linux via `Socket::(set_)tcp_notsent_lowat` (https://github.com/rust-lang/socket2/pull/611). * Added support for `SO_BUSY_POLL` on Linux via `Socket::set_busy_poll` (https://github.com/rust-lang/socket2/pull/607). * `SockFilter::new` is now a const function (https://github.com/rust-lang/socket2/pull/609). ## Changed * Updated the windows-sys dependency to version 0.60 (https://github.com/rust-lang/socket2/pull/605). # 0.6.0 ## Breaking changes All IPv4 methods now have a `_v4` suffix, IPv6 uses `_v6`. TCP methods have a `tcp_` prefix (looked better than a suffix). Furthermore we removed all types from external libraries (i.e. libc or windows-sys) from the public API, allowing us to update those without breaking the API. * Renamed `Socket::freebind_ipv6` to `freebind_v6` (https://github.com/rust-lang/socket2/pull/592). * Renamed `Socket::freebind` to `freebind_v4` (https://github.com/rust-lang/socket2/pull/592). * Renamed `Socket::original_dst` to `original_dst_v4` (https://github.com/rust-lang/socket2/pull/592). * Renamed `Socket::original_dst_ipv6` to `original_dst_v6` (https://github.com/rust-lang/socket2/pull/592). * Bump MSRV to 1.70 (https://github.com/rust-lang/socket2/pull/597). * Use `c_int` from `std::ffi` instead of from libc (https://github.com/rust-lang/socket2/pull/599, https://github.com/rust-lang/socket2/pull/595). * `SockAddr`'s methods now accept/return `SockAddrStorage` instead of `sockaddr_storage`/`SOCKADDR_STORAGE` (https://github.com/rust-lang/socket2/pull/576): * `new` * `try_init` * `as_ptr` * `as_storage` * Add `SockFilter`, wrapper around `libc::sock_filter`, argument to `Socket::attach_filter` (https://github.com/rust-lang/socket2/pull/581). * Various renames of TCP methods on `Socket` (https://github.com/rust-lang/socket2/pull/592): * `keepalive_time` -> `tcp_keepalive_time` * `keepalive_interval` -> `tcp_keepalive_interval` * `keepalive_retries` -> `tcp_keepalive_retries` * `nodelay` -> `tcp_nodelay` * `set_nodelay` -> `set_tcp_nodelay` * `tcp_mss` -> `mss` * `tcp_set_mss` -> `set_mss` * `tcp_cork` -> `cork` * `tcp_set_cork` -> `set_cork` * `tcp_quickack` -> `quickack` * `tcp_set_quickack` -> `set_quickack` * `thin_linear_timeouts` -> `tcp_thin_linear_timeouts`. ## Non-breaking changes * Added `Socket::(set_)priority` (https://github.com/rust-lang/socket2/pull/588). * Added TCP retries on Windows (https://github.com/rust-lang/socket2/pull/557). * Added `SockAddrStorage`, wrapper around `sockaddr_storage`/`SOCKADDR_STORAGE` for usage with `SockAddr` (instead of the types from libc/windows-sys) (https://github.com/rust-lang/socket2/pull/576). * Implemented `Socket::bind_device_by_index_{v4,v6}` on Android and Linux (https://github.com/rust-lang/socket2/pull/572). * Implemented `Copy` and `Clone` for `InterfaceIndexOrAddress` (https://github.com/rust-lang/socket2/pull/571). * Updated to Windows-sys v0.59 (https://github.com/rust-lang/socket2/pull/579). * We now use `OwnedFd`/`OwnedSocket` internally for `Socket` (https://github.com/rust-lang/socket2/pull/600). # 0.5.10 * Add cygwin support (https://github.com/rust-lang/socket2/pull/568, https://github.com/rust-lang/socket2/pull/578). # 0.5.9 * Enable `IP_BOUND_IF` on illumos and Solaris (https://github.com/rust-lang/socket2/pull/561, https://github.com/rust-lang/socket2/pull/566). # 0.5.8 * Added `Socket::(set_)header_included_v4` and `Socket::(set_)header_included_v6` (https://github.com/rust-lang/socket2/pull/518). * Added support for `Socket::original_dst` and `Socket::original_dst_ipv6` on Windows (https://github.com/rust-lang/socket2/pull/529). # 0.5.7 * Added `Socket::(set_)passcred` (https://github.com/rust-lang/socket2/pull/506). * Added `RecvFlags::is_confirm` and `RecvFlags::is_dontroute` (https://github.com/rust-lang/socket2/pull/499). * Added `MsgHdrMut::control_len` (https://github.com/rust-lang/socket2/pull/505). # 0.5.6 * Added `Socket::(set_)multicast_all_v{4,6}` (https://github.com/rust-lang/socket2/pull/485 and https://github.com/rust-lang/socket2/pull/486). * Added support for GNU/Hurd (https://github.com/rust-lang/socket2/pull/474). * Fixes compilation on Haiku (https://github.com/rust-lang/socket2/pull/479 and https://github.com/rust-lang/socket2/pull/482). * Fixes compilation on OpenHarmony (https://github.com/rust-lang/socket2/pull/491). * Update to window-sys v0.52 (https://github.com/rust-lang/socket2/pull/480). # 0.5.5 * Added support for Vita (https://github.com/rust-lang/socket2/pull/465). # 0.5.4 * Deprecated `Socket::(bind_)device_by_index`, replaced by `Socket::(bind_)device_by_index_v4` for IPv4 sockets (https://github.com/rust-lang/socket2/pull/432). * Added `Socket::(bind_)device_by_index_v6` (https://github.com/rust-lang/socket2/pull/432). * Added experimental support for the ESP-IDF framework (https://github.com/rust-lang/socket2/pull/452) * Added `Socket::{send,recv}msg` and `MsgHdr(Mut)` types, wrapping `sendmsg(2)` and `recvmsg(2)` (https://github.com/rust-lang/socket2/pull/447). * Added `Socket::(set_)reuse_port_lb` to retrieve or set `SO_REUSEPORT_LB` on FreeBSD (https://github.com/rust-lang/socket2/pull/442). * Added `Protocol::DIVERT` on FreeBSD and OpenBSD (https://github.com/rust-lang/socket2/pull/448). * Added `Socket::protocol` for Windows (using `WSAPROTOCOL_INFOW`) (https://github.com/rust-lang/socket2/pull/470). * `From` for `SockAddr ` nows sets `ss_len` on platforms that have the fields (most BSDs) (https://github.com/rust-lang/socket2/pull/469). * Change Windows to use `ADDRESS_FAMILY` for `sa_family_t`, this shouldn't affect anything in practice (https://github.com/rust-lang/socket2/pull/463). # 0.5.3 * Added support for two new Android targets `armv7-linux-androideabi` and `i686-linux-android` (https://github.com/rust-lang/socket2/pull/434). * Added `Socket::cookie` to retrieve `SO_COOKIE` on Linux (https://github.com/rust-lang/socket2/pull/437). # 0.5.2 * Added Unix socket methods to `SockAddr` (https://github.com/rust-lang/socket2/pull/403 and https://github.com/rust-lang/socket2/pull/429). * Added `SockAddr::as_storage` (https://github.com/rust-lang/socket2/pull/417). * Added `SockAddr::set_length` (https://github.com/rust-lang/socket2/pull/428). * Added `Protocol::UDPLITE` (https://github.com/rust-lang/socket2/pull/427). * Update windows-sys to 0.48 (https://github.com/rust-lang/socket2/pull/422). * Fixes Fuchsia target after it changes in 1.68, see (https://github.com/rust-lang/socket2/pull/423). * Fixes musl target and adds it to the CI (https://github.com/rust-lang/socket2/pull/426). # 0.5.1 ## Added * `Type::cloexec` for Redox and Solaris (https://github.com/rust-lang/socket2/pull/398). * Generate documentation for more targets on docs.rs (https://github.com/rust-lang/socket2/pull/398). ## Fixed * Generatation of documentation on docs.rs (https://github.com/rust-lang/socket2/pull/398). # 0.5.0 ## Changed * **BREAKING** `SockAddr::init` is renamed to `try_init` to indicate it can fail (https://github.com/rust-lang/socket2/pull/328). * **BREAKING** Remove the returned `Result` from `SockAddr::vsock`, it can't fail (https://github.com/rust-lang/socket2/pull/328). * **BREAKING** `From` is now implemented using the I/O traits `AsFd` and `AsRawSocket` (https://github.com/rust-lang/socket2/pull/325): * **BREAKING** renamed `SockAddr::vsock_addr` `SockAddr::as_vsock_addr` to match the IPv4 and IPv6 methods (https://github.com/rust-lang/socket2/pull/334). * Redox now works on a stable compiler (https://github.com/rust-lang/socket2/pull/326). * Remove copy from `From` implementation for `SockAddr` (https://github.com/rust-lang/socket2/pull/335). * Marked function as constant where possible. * Updated to Rust edition 2021 (https://github.com/rust-lang/socket2/pull/393). ## Added * Links to OS documentation to a lot of methods (https://github.com/rust-lang/socket2/pull/319). * I/O-safety traits (https://github.com/rust-lang/socket2/pull/325): * `AsFd` for `Socket` (Unix only). * `From` for `Socket` (Unix only). * `From` for `OwnedFd` (Unix only). * `AsSocket` for `Socket` (Windows only). * `From` for `Socket` (Windows only). * `From` for `OwnedSocket` (Windows only). * Unix socket support on Windows (https://github.com/rust-lang/socket2/pull/249). * `SockAddr::is_ipv{4,6}` and `SockAddr::domain` (https://github.com/rust-lang/socket2/pull/334). * `Socket::nonblocking` (https://github.com/rust-lang/socket2/pull/348). * `Socket::original_dst(_ipv6)` (https://github.com/rust-lang/socket2/pull/360). * `Socket::(set_)recv_tclass_v6` and `Socket::(set_)tclass_v6` (https://github.com/rust-lang/socket2/pull/364). * `Socket::(set_)tcp_congestion` (https://github.com/rust-lang/socket2/pull/371). * Support for various DCCP socket options in the form of (https://github.com/rust-lang/socket2/pull/359): * `Socket::(set_)dccp_service` * `Socket::dccp_available_ccids` * `Socket::dccp_qpolicy_txqlen` * `Socket::dccp_recv_cscov` * `Socket::dccp_send_cscov` * `Socket::dccp_server_timewait` * `Socket::dccp_server_timewait` * `Socket::dccp_tx_ccid` * `Socket::dccp_xx_ccid` * `Socket::set_dccp_ccid` * `Socket::set_dccp_qpolicy_txqlen` * `Socket::set_dccp_recv_cscov` * `Socket::set_dccp_send_cscov` * `Socket::set_dccp_server_timewait` * `Socket::dccp_cur_mps` * `Socket::peek_send` (https://github.com/rust-lang/socket2/pull/389). * `Protocol::MPTCP` (https://github.com/rust-lang/socket2/pull/349). * `Protocol::SCTP` (https://github.com/rust-lang/socket2/pull/356). * `Protocol::DCCP` (https://github.com/rust-lang/socket2/pull/359). * `Type::DCCP` (https://github.com/rust-lang/socket2/pull/359). * Implement `Eq` and `Hash` for `SockAddr` (https://github.com/rust-lang/socket2/pull/374). * Support for QNX Neutrino (https://github.com/rust-lang/socket2/pull/380). * Support for AIX (https://github.com/rust-lang/socket2/pull/351). # 0.4.10 * Fixed compilation with the `all` on QNX Neutrino (https://github.com/rust-lang/socket2/pull/419). * Added support for ESP-IDF (https://github.com/rust-lang/socket2/pull/455). * Added support for Vita (https://github.com/rust-lang/socket2/pull/475). # 0.4.9 * Fixed compilation on Windows (https://github.com/rust-lang/socket2/pull/409). # 0.4.8 (yanked) This release was broken for Windows. * Added `Socket::peek_sender` (backport) (https://github.com/rust-lang/socket2/pull/404). # 0.4.7 * Fixes compilation on OpenBSD (https://github.com/rust-lang/socket2/pull/344). * Fixes compilation on DragonFlyBSD (https://github.com/rust-lang/socket2/pull/342). # 0.4.6 * Reverted back to the `winapi` dependency as switch to `windows-sys` was a breaking change (https://github.com/rust-lang/socket2/pull/340). Note that we'll will switch to `windows-sys` in v0.5 . * Disable RECVTOS on OpenBSD (https://github.com/rust-lang/socket2/pull/307). * Derive Clone for SockAddr (https://github.com/rust-lang/socket2/pull/311). * Fixes cfg attributes for Fuchsia (https://github.com/rust-lang/socket2/pull/314). # 0.4.5 (yanked) ## Changed * Replace `winapi` dependency with `windows-sys` (https://github.com/rust-lang/socket2/pull/303). ## Added * `Socket::join_ssm_v4` and `Socket::leave_ssm_v4` (https://github.com/rust-lang/socket2/pull/298). * `Socket::set_recv_tos` and `Socket::recv_tos` (https://github.com/rust-lang/socket2/pull/299). ## Fixed * OpenBSD build (https://github.com/rust-lang/socket2/pull/291). # 0.4.4 ## Fixed * Libc v0.2.114 fixed an issue where `ip_mreqn` where was not defined for Linux s390x. # 0.4.3 (yanked) ## Added * `Socket::set_fib`: sets `SO_SETFIB` (https://github.com/rust-lang/socket2/pull/271). * `Socket::attach_filter`, `SO_ATTACH_FILTER` (https://github.com/rust-lang/socket2/commit/6601ed132b37d6e9d178b34918bfb0b236800232). * `Socket::detach_filter`, `SO_DETACH_FILTER` (https://github.com/rust-lang/socket2/commit/6601ed132b37d6e9d178b34918bfb0b236800232). * `Socket::{header_included, set_header_included}`: sets or gets `IP_HDRINCL` (https://github.com/rust-lang/socket2/commit/f9e882ee53c0b4e89c5043b6d709af95c9db5599). * `Socket::{cork, set_cork}`: sets or gets `TCP_CORK` (https://github.com/rust-lang/socket2/commit/50f31f18aac8fd6ef277df2906adeeed9fa391de). * `Socket::{quickack, set_quickack}`: sets or gets `TCP_QUICKACK` (https://github.com/rust-lang/socket2/commit/849eee2abc5d5170d2d3bc635386a2ba13b04530). * `Socket::{thin_linear_timeouts, set_thin_linear_timeouts}`: sets or gets `TCP_THIN_LINEAR_TIMEOUTS` (https://github.com/rust-lang/socket2/commit/24c231ca463a17f51e53e7a554c7915a95bdbcc7). * `Socket::{join_multicast_v4_n, leave_multicast_v4_n}`: extends the existing multicast API by allowing an index to be used (in addition to an address) (https://github.com/rust-lang/socket2/commit/750f83618b967c620bbfdf6ca04de7362bdb42b5). # 0.4.2 ## Added * `Socket::(set_)freebind_ipv6`, getter and setter for `IPV6_FREEBIND`. ## Fixed * Compilation on OpenBSD. * Usage of incorrect flag in `Socket::(set_)freebind`. # 0.4.1 ## Added * Added `SockAddr::new` * Support for `TCP_USER_TIMEOUT`. * Support for `IP_BOUND_IF`. * Support for `IP_TRANSPARENT`. * Enable `Socket::type` on all platforms. * Support for uclibc (for Haiku support). * Added DragonFly support for TCP keepalive (`KEEPINTVL`/`KEEPCNT`). * Documentation for proper use of `SockRef::from`, and the improper use. * Assertion in `SockRef::from` to ensure the raw socket valid. ## Fixed * Compilation on Haiku. * Setting TCP keepalive on Haiku and OpenBSD (by not setting it as it's not supported). * Size check for abstract namespaces in `SockAddr::unix`. * Set noinherit on accepted sockets on Windows when opening sockets. # 0.4.0 ## Added * New `all` feature: enables API that is not available on all tier 1 platforms. * `SockRef` type: used to create a reference to an existing socket, e.g. `std::net::TcpStream`, making all methods of `Socket` available on it. * Support for vectored I/O: * `Socket::recv_vectored`, `Socket::recv_with_flags`. * `Socket::recv_from_vectored`, `Socket::recv_from_vectored_with_flags`. * `Socket::send_vectored`, `Socket::send_vectored_with_flags`. * `Socket::send_to_vectored`, `Socket::send_to_vectored_with_flags`. * In the `Read` and `Write` implementations. * `Socket::new_raw`, `Socket::pair_raw` and `Socket::accept_raw` methods that don't set common flags, such as the close-on-exec flag. * `Socket::accept4`: `accept4(2)` system call. * `Socket::sendfile`: the `sendfile(2)` system call. * `Socket::set_cloexec`: set the close-on-exec flag on Unix. * `Socket::set_no_inherit`: set inherit handle flag on Windows. * `Socket::set_nosigpipe`: set `SO_NOSIGPIPE` on Apple targets. * `Socket::set_mark` and `Socket::mark`, setting/getting the `SO_MARK` socket option. * `Socket::set_cpu_affinity` and `Socket::cpu_affinity`, setting/getting the `SO_INCOMING_CPU` socket option. * `Socket::set_mss` and `Socket::mss`, setting/getting the `TCP_MAXSEG` socket option. * `Socket::set_freebind` and `Socket::freebind`, setting/getting the `IP_FREEBIND` socket option. * `Socket::bind_device` and `Socket::device`, setting/getting the `SO_BINDTODEVICE` socket option. * Adopted Mio's TCP keepalive API: * `Socket::keepalive_time`, * `Socket::keepalive_interval`, * `Socket::keepalive_retries`, * `Socket::set_tcp_keepalive`. * `Socket::is_listener` getting the `SO_ACCEPTCONN` socket option. * `Socket::domain` getting the `SO_DOMAIN` socket option. * `Socket::protocol` getting the `SO_PROTOCOL` socket option. * `Socket::type` getting the `SO_TYPE` socket option. * `Domain::for_address`: the correct `Domain` for a `std::net::SocketAddr`. * `Type::nonblocking`: set `SOCK_NONBLOCK`. * `Type::cloexec`: set `SOCK_CLOEXEC`. * `Type::no_inherit`: set `HANDLE_FLAG_INHERIT`. * `SockAddr::init`: initialises a `SockAddr`. * `MaybeUninitSlice` type: a version of `IoSliceMut` that allows the buffer to be uninitialised, used in `Socket::recv_vectored` and related functions. * `RecvFlags` type: provides additional information about incoming messages, returned by `Socket::recv_vectored` and related functions. * `TcpKeepalive` type: configuration type for a socket's TCP keepalive parameters. ## Changed * Repository moved to . * **BREAKING:** Changed constructor functions into constants: * `Domain::ipv4` => `Domain::IPV4`. * `Domain::ipv6` => `Domain::IPV4`. * `Domain::unix` => `Domain::UNIX`. * `Domain::packet` => `Domain::PACKET`. * `Type::stream` => `Type::STREAM`. * `Type::dgram` => `Type::DGRAM`. * `Type::seqpacket` => `Type::SEQPACKET`. * `Type::raw` => `Type::RAW`. * `Protocol::icmpv4` => `Protocol::ICMPV4`. * `Protocol::icmpv6` => `Protocol::ICMPV6`. * `Protocol::tcp` => `Protocol::TCP`. * `Protocol::udp` => `Protocol::UDP`. * **BREAKING:** Changed the signature of `Socket::recv`, `Socket::recv_vectored` and related methods to accept uninitialised buffers. The `Read` implementation can be used to read into initialised buffers. * **BREAKING:** Renamed `SockAddr::as_std` to `as_socket`. * **BREAKING:** Renamed `SockAddr::as_inet` to `as_socket_ipv4`. * **BREAKING:** Renamed `SockAddr::as_inet6` to `as_socket_ipv6`. * **BREAKING:** Replace all previously existing features (reuseport, pair, unix) with a new all features (see above for description of the all feature). * Use `accept4(2)` with `SOCK_CLOEXEC` in `Socket::accept`, reducing the amount of system calls required. * Marked many functions as constant. * The `Read` implementation now calls `recv(2)` rather than `read(2)`. * Split the `impl` block for the `Socket` type to create groupings for setting and getting different level socket options using `setsockopt(2)`/`getsockopt(2)`. * Updated `winapi` depdency to version 0.3.9 and dropped unused features. ## Removed * Removed the `-rs` suffix from the repository name. * **BREAKING:** Removed `SockAddr::from_raw_parts`, use `SockAddr::init` instead. * **BREAKING:** Removed `Socket::into_*` functions and replaced them with a `From` implementation: * `Socket::into_tcp_stream` => `TcpStream::from(socket)`. * `Socket::into_tcp_listener` => `TcpListener::from(socket)`. * `Socket::into_udp_socket` => `UdpSocket::from(socket)`. * `Socket::into_unix_stream` => `UnixStream::from(socket)`. * `Socket::into_unix_listener` => `UnixListener::from(socket)`. * `Socket::into_unix_datagram` => `UnixDatagram::from(socket)`. * Removed `cfg-if` dependency. * Remove `redox_syscall` depdency. ## Fixes * Fixes the Andoid, Fuchsia, Haiku, iOS, illumos, NetBSD and Redox (nightly only) targets. * Correctly call `recv_from` in `Socket::recv_from_with_flags` (called `recv` previously). * Correctly call `send_to` in `Socket::send_to_with_flags` (called `recv` previously). * Use correct inmutable references in `Socket::send_with_flags` and `Socket::send_out_of_band`. * Use `IPPROTO_IPV6` in `Socket::join_multicast_v6` on Windows. * Use `c_int` instead of `i32` where appropriate. ## From v0.4.0-alpha.1 to v0.4.0-alpha.2 * Fixes the Fuchsia target. * `Socket::device` now returns a `Vec` rather than `CString`. * `Socket::bind_device` now accepts a `&[u8]` rather than `&CStr`. ## From v0.4.0-alpha.2 to v0.4.0-alpha.3 * `Socket::connect_timeout` was added back. ## From v0.4.0-alpha.4 to v0.4.0-alpha.5 * Changed `Socket::set_cpu_affinity` and `Socket::cpu_affinity` to use an immutable reference. ## From v0.4.0-alpha.5 to v0.4.0 * Use `SO_LINGER_SEC` on macOS for `Socket::get/set_linger`. # 0.3.16 * Don't assume the memory layout of `std::net::SocketAddr`. * Other changes omited