- 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
MsgHdrandMsgHdrMutare marked as transparent meaning both have the same layout asmsghdron Unix andWSAMSGon Windows (#635).- Don't set
SO_NOSIGPIPEwhen accepting sockets, this is inherited from the parent socket (#632). - Fixes
Socket::tcp_notsent_lowatby using the correct argument type (#622).
- Added support for Windows Registered I/O (RIO) (#604).
- Added support for
TCP_NOTSENT_LOWATon Linux viaSocket::(set_)tcp_notsent_lowat(#611). - Added support for
SO_BUSY_POLLon Linux viaSocket::set_busy_poll(#607). SockFilter::newis now a const function (#609).
- Updated the windows-sys dependency to version 0.60 (#605).
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_ipv6tofreebind_v6(#592). - Renamed
Socket::freebindtofreebind_v4(#592). - Renamed
Socket::original_dsttooriginal_dst_v4(#592). - Renamed
Socket::original_dst_ipv6tooriginal_dst_v6(#592). - Bump MSRV to 1.70 (#597).
- Use
c_intfromstd::ffiinstead of from libc (#599, #595). SockAddr's methods now accept/returnSockAddrStorageinstead ofsockaddr_storage/SOCKADDR_STORAGE(#576):newtry_initas_ptras_storage
- Add
SockFilter, wrapper aroundlibc::sock_filter, argument toSocket::attach_filter(#581). - Various renames of TCP methods on
Socket(#592):keepalive_time->tcp_keepalive_timekeepalive_interval->tcp_keepalive_intervalkeepalive_retries->tcp_keepalive_retriesnodelay->tcp_nodelayset_nodelay->set_tcp_nodelaytcp_mss->msstcp_set_mss->set_msstcp_cork->corktcp_set_cork->set_corktcp_quickack->quickacktcp_set_quickack->set_quickackthin_linear_timeouts->tcp_thin_linear_timeouts.
- Added
Socket::(set_)priority(#588). - Added TCP retries on Windows (#557).
- Added
SockAddrStorage, wrapper aroundsockaddr_storage/SOCKADDR_STORAGEfor usage withSockAddr(instead of the types from libc/windows-sys) (#576). - Implemented
Socket::bind_device_by_index_{v4,v6}on Android and Linux (#572). - Implemented
CopyandCloneforInterfaceIndexOrAddress(#571). - Updated to Windows-sys v0.59 (#579).
- We now use
OwnedFd/OwnedSocketinternally forSocket(#600).
- Added
Socket::(set_)header_included_v4andSocket::(set_)header_included_v6(#518). - Added support for
Socket::original_dstandSocket::original_dst_ipv6on Windows (#529).
- Added
Socket::(set_)passcred(#506). - Added
RecvFlags::is_confirmandRecvFlags::is_dontroute(#499). - Added
MsgHdrMut::control_len(#505).
- Added
Socket::(set_)multicast_all_v{4,6}(#485 and #486). - Added support for GNU/Hurd (#474).
- Fixes compilation on Haiku (#479 and #482).
- Fixes compilation on OpenHarmony (#491).
- Update to window-sys v0.52 (#480).
- Added support for Vita (#465).
- Deprecated
Socket::(bind_)device_by_index, replaced bySocket::(bind_)device_by_index_v4for IPv4 sockets (#432). - Added
Socket::(bind_)device_by_index_v6(#432). - Added experimental support for the ESP-IDF framework (#452)
- Added
Socket::{send,recv}msgandMsgHdr(Mut)types, wrappingsendmsg(2)andrecvmsg(2)(#447). - Added
Socket::(set_)reuse_port_lbto retrieve or setSO_REUSEPORT_LBon FreeBSD (#442). - Added
Protocol::DIVERTon FreeBSD and OpenBSD (#448). - Added
Socket::protocolfor Windows (usingWSAPROTOCOL_INFOW) (#470). From<SocketAddrV{4,6}>forSockAddrnows setsss_lenon platforms that have the fields (most BSDs) (#469).- Change Windows to use
ADDRESS_FAMILYforsa_family_t, this shouldn't affect anything in practice (#463).
- Added support for two new Android targets
armv7-linux-androideabiandi686-linux-android(#434). - Added
Socket::cookieto retrieveSO_COOKIEon Linux (#437).
- Added Unix socket methods to
SockAddr(#403 and #429). - Added
SockAddr::as_storage(#417). - Added
SockAddr::set_length(#428). - Added
Protocol::UDPLITE(#427). - Update windows-sys to 0.48 (#422).
- Fixes Fuchsia target after it changes in 1.68, see https://github.com/rust-lang/rust/blob/master/RELEASES.md#version-1680-2023-03-09 (#423).
- Fixes musl target and adds it to the CI (#426).
Type::cloexecfor Redox and Solaris (#398).- Generate documentation for more targets on docs.rs (#398).
- Generatation of documentation on docs.rs (#398).
- BREAKING
SockAddr::initis renamed totry_initto indicate it can fail (#328). - BREAKING Remove the returned
ResultfromSockAddr::vsock, it can't fail (#328). - BREAKING
From<S>is now implemented using the I/O traitsAsFdandAsRawSocket(#325): - BREAKING renamed
SockAddr::vsock_addrSockAddr::as_vsock_addrto match the IPv4 and IPv6 methods (#334). - Redox now works on a stable compiler (#326).
- Remove copy from
From<SocketAddrV{4,6}>implementation forSockAddr(#335). - Marked function as constant where possible.
- Updated to Rust edition 2021 (#393).
- Links to OS documentation to a lot of methods (#319).
- I/O-safety traits (#325):
AsFdforSocket(Unix only).From<OwnedFd>forSocket(Unix only).From<Socket>forOwnedFd(Unix only).AsSocketforSocket(Windows only).From<OwnedSocket>forSocket(Windows only).From<Socket>forOwnedSocket(Windows only).
- Unix socket support on Windows (#249).
SockAddr::is_ipv{4,6}andSockAddr::domain(#334).Socket::nonblocking(#348).Socket::original_dst(_ipv6)(#360).Socket::(set_)recv_tclass_v6andSocket::(set_)tclass_v6(#364).Socket::(set_)tcp_congestion(#371).- Support for various DCCP socket options in the form of
(#359):
Socket::(set_)dccp_serviceSocket::dccp_available_ccidsSocket::dccp_qpolicy_txqlenSocket::dccp_recv_cscovSocket::dccp_send_cscovSocket::dccp_server_timewaitSocket::dccp_server_timewaitSocket::dccp_tx_ccidSocket::dccp_xx_ccidSocket::set_dccp_ccidSocket::set_dccp_qpolicy_txqlenSocket::set_dccp_recv_cscovSocket::set_dccp_send_cscovSocket::set_dccp_server_timewaitSocket::dccp_cur_mps
Socket::peek_send(#389).Protocol::MPTCP(#349).Protocol::SCTP(#356).Protocol::DCCP(#359).Type::DCCP(#359).- Implement
EqandHashforSockAddr(#374). - Support for QNX Neutrino (#380).
- Support for AIX (#351).
- Fixed compilation with the
allon QNX Neutrino (#419). - Added support for ESP-IDF (#455).
- Added support for Vita (#475).
- Fixed compilation on Windows (#409).
This release was broken for Windows.
- Added
Socket::peek_sender(backport) (#404).
- Reverted back to the
winapidependency as switch towindows-syswas a breaking change (#340). Note that we'll will switch towindows-sysin v0.5 . - Disable RECVTOS on OpenBSD (#307).
- Derive Clone for SockAddr (#311).
- Fixes cfg attributes for Fuchsia (#314).
- Replace
winapidependency withwindows-sys(#303).
Socket::join_ssm_v4andSocket::leave_ssm_v4(#298).Socket::set_recv_tosandSocket::recv_tos(#299).
- OpenBSD build (#291).
- Libc v0.2.114 fixed an issue where
ip_mreqnwhere was not defined for Linux s390x.
Socket::set_fib: setsSO_SETFIB(#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 getsIP_HDRINCL(https://github.com/rust-lang/socket2/commit/f9e882ee53c0b4e89c5043b6d709af95c9db5599).Socket::{cork, set_cork}: sets or getsTCP_CORK(https://github.com/rust-lang/socket2/commit/50f31f18aac8fd6ef277df2906adeeed9fa391de).Socket::{quickack, set_quickack}: sets or getsTCP_QUICKACK(https://github.com/rust-lang/socket2/commit/849eee2abc5d5170d2d3bc635386a2ba13b04530).Socket::{thin_linear_timeouts, set_thin_linear_timeouts}: sets or getsTCP_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).
Socket::(set_)freebind_ipv6, getter and setter forIPV6_FREEBIND.
- Compilation on OpenBSD.
- Usage of incorrect flag in
Socket::(set_)freebind.
- Added
SockAddr::new - Support for
TCP_USER_TIMEOUT. - Support for
IP_BOUND_IF. - Support for
IP_TRANSPARENT. - Enable
Socket::typeon 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::fromto ensure the raw socket valid.
- 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.
- New
allfeature: enables API that is not available on all tier 1 platforms. SockReftype: used to create a reference to an existing socket, e.g.std::net::TcpStream, making all methods ofSocketavailable 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
ReadandWriteimplementations.
Socket::new_raw,Socket::pair_rawandSocket::accept_rawmethods that don't set common flags, such as the close-on-exec flag.Socket::accept4:accept4(2)system call.Socket::sendfile: thesendfile(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: setSO_NOSIGPIPEon Apple targets.Socket::set_markandSocket::mark, setting/getting theSO_MARKsocket option.Socket::set_cpu_affinityandSocket::cpu_affinity, setting/getting theSO_INCOMING_CPUsocket option.Socket::set_mssandSocket::mss, setting/getting theTCP_MAXSEGsocket option.Socket::set_freebindandSocket::freebind, setting/getting theIP_FREEBINDsocket option.Socket::bind_deviceandSocket::device, setting/getting theSO_BINDTODEVICEsocket option.- Adopted Mio's TCP keepalive API:
Socket::keepalive_time,Socket::keepalive_interval,Socket::keepalive_retries,Socket::set_tcp_keepalive.
Socket::is_listenergetting theSO_ACCEPTCONNsocket option.Socket::domaingetting theSO_DOMAINsocket option.Socket::protocolgetting theSO_PROTOCOLsocket option.Socket::typegetting theSO_TYPEsocket option.Domain::for_address: the correctDomainfor astd::net::SocketAddr.Type::nonblocking: setSOCK_NONBLOCK.Type::cloexec: setSOCK_CLOEXEC.Type::no_inherit: setHANDLE_FLAG_INHERIT.SockAddr::init: initialises aSockAddr.MaybeUninitSlicetype: a version ofIoSliceMutthat allows the buffer to be uninitialised, used inSocket::recv_vectoredand related functions.RecvFlagstype: provides additional information about incoming messages, returned bySocket::recv_vectoredand related functions.TcpKeepalivetype: configuration type for a socket's TCP keepalive parameters.
- Repository moved to https://github.com/rust-lang/socket2.
- 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_vectoredand related methods to accept uninitialised buffers. TheReadimplementation can be used to read into initialised buffers. - BREAKING: Renamed
SockAddr::as_stdtoas_socket. - BREAKING: Renamed
SockAddr::as_inettoas_socket_ipv4. - BREAKING: Renamed
SockAddr::as_inet6toas_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)withSOCK_CLOEXECinSocket::accept, reducing the amount of system calls required. - Marked many functions as constant.
- The
Readimplementation now callsrecv(2)rather thanread(2). - Split the
implblock for theSockettype to create groupings for setting and getting different level socket options usingsetsockopt(2)/getsockopt(2). - Updated
winapidepdency to version 0.3.9 and dropped unused features.
- Removed the
-rssuffix from the repository name. - BREAKING: Removed
SockAddr::from_raw_parts, useSockAddr::initinstead. - BREAKING: Removed
Socket::into_*functions and replaced them with aFromimplementation: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-ifdependency. - Remove
redox_syscalldepdency.
- Fixes the Andoid, Fuchsia, Haiku, iOS, illumos, NetBSD and Redox (nightly only) targets.
- Correctly call
recv_frominSocket::recv_from_with_flags(calledrecvpreviously). - Correctly call
send_toinSocket::send_to_with_flags(calledrecvpreviously). - Use correct inmutable references in
Socket::send_with_flagsandSocket::send_out_of_band. - Use
IPPROTO_IPV6inSocket::join_multicast_v6on Windows. - Use
c_intinstead ofi32where appropriate.
- Fixes the Fuchsia target.
Socket::devicenow returns aVec<u8>rather thanCString.Socket::bind_devicenow accepts a&[u8]rather than&CStr.
Socket::connect_timeoutwas added back.
- Changed
Socket::set_cpu_affinityandSocket::cpu_affinityto use an immutable reference.
- Use
SO_LINGER_SECon macOS forSocket::get/set_linger.
- Don't assume the memory layout of
std::net::SocketAddr. - Other changes omited