- Added
Socket::(set_)passcred
(#506). - Added
RecvFlags::is_confirm
andRecvFlags::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_v4
for IPv4 sockets (#432). - Added
Socket::(bind_)device_by_index_v6
(#432). - Added experimental support for the ESP-IDF framework (#452)
- Added
Socket::{send,recv}msg
andMsgHdr(Mut)
types, wrappingsendmsg(2)
andrecvmsg(2)
(#447). - Added
Socket::(set_)reuse_port_lb
to retrieve or setSO_REUSEPORT_LB
on FreeBSD (#442). - Added
Protocol::DIVERT
on FreeBSD and OpenBSD (#448). - Added
Socket::protocol
for Windows (usingWSAPROTOCOL_INFOW
) (#470). From<SocketAddrV{4,6}>
forSockAddr
nows setsss_len
on platforms that have the fields (most BSDs) (#469).- Change Windows to use
ADDRESS_FAMILY
forsa_family_t
, this shouldn't affect anything in practice (#463).
- Added support for two new Android targets
armv7-linux-androideabi
andi686-linux-android
(#434). - Added
Socket::cookie
to retrieveSO_COOKIE
on 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::cloexec
for Redox and Solaris (#398).- Generate documentation for more targets on docs.rs (#398).
- Generatation of documentation on docs.rs (#398).
- BREAKING
SockAddr::init
is renamed totry_init
to indicate it can fail (#328). - BREAKING Remove the returned
Result
fromSockAddr::vsock
, it can't fail (#328). - BREAKING
From<S>
is now implemented using the I/O traitsAsFd
andAsRawSocket
(#325): - BREAKING renamed
SockAddr::vsock_addr
SockAddr::as_vsock_addr
to 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):
AsFd
forSocket
(Unix only).From<OwnedFd>
forSocket
(Unix only).From<Socket>
forOwnedFd
(Unix only).AsSocket
forSocket
(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_v6
andSocket::(set_)tclass_v6
(#364).Socket::(set_)tcp_congestion
(#371).- Support for various DCCP socket options in the form of
(#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
(#389).Protocol::MPTCP
(#349).Protocol::SCTP
(#356).Protocol::DCCP
(#359).Type::DCCP
(#359).- Implement
Eq
andHash
forSockAddr
(#374). - Support for QNX Neutrino (#380).
- Support for AIX (#351).
- Fixed compilation with the
all
on 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
winapi
dependency as switch towindows-sys
was a breaking change (#340). Note that we'll will switch towindows-sys
in v0.5 . - Disable RECVTOS on OpenBSD (#307).
- Derive Clone for SockAddr (#311).
- Fixes cfg attributes for Fuchsia (#314).
- Replace
winapi
dependency withwindows-sys
(#303).
Socket::join_ssm_v4
andSocket::leave_ssm_v4
(#298).Socket::set_recv_tos
andSocket::recv_tos
(#299).
- OpenBSD build (#291).
- Libc v0.2.114 fixed an issue where
ip_mreqn
where 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::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.
- 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
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 ofSocket
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
andWrite
implementations.
Socket::new_raw
,Socket::pair_raw
andSocket::accept_raw
methods 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_NOSIGPIPE
on Apple targets.Socket::set_mark
andSocket::mark
, setting/getting theSO_MARK
socket option.Socket::set_cpu_affinity
andSocket::cpu_affinity
, setting/getting theSO_INCOMING_CPU
socket option.Socket::set_mss
andSocket::mss
, setting/getting theTCP_MAXSEG
socket option.Socket::set_freebind
andSocket::freebind
, setting/getting theIP_FREEBIND
socket option.Socket::bind_device
andSocket::device
, setting/getting theSO_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 theSO_ACCEPTCONN
socket option.Socket::domain
getting theSO_DOMAIN
socket option.Socket::protocol
getting theSO_PROTOCOL
socket option.Socket::type
getting theSO_TYPE
socket option.Domain::for_address
: the correctDomain
for astd::net::SocketAddr
.Type::nonblocking
: setSOCK_NONBLOCK
.Type::cloexec
: setSOCK_CLOEXEC
.Type::no_inherit
: setHANDLE_FLAG_INHERIT
.SockAddr::init
: initialises aSockAddr
.MaybeUninitSlice
type: a version ofIoSliceMut
that allows the buffer to be uninitialised, used inSocket::recv_vectored
and related functions.RecvFlags
type: provides additional information about incoming messages, returned bySocket::recv_vectored
and related functions.TcpKeepalive
type: 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_vectored
and related methods to accept unitialised buffers. TheRead
implementation can be used to read into initialised buffers. - BREAKING: Renamed
SockAddr::as_std
toas_socket
. - BREAKING: Renamed
SockAddr::as_inet
toas_socket_ipv4
. - BREAKING: Renamed
SockAddr::as_inet6
toas_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_CLOEXEC
inSocket::accept
, reducing the amount of system calls required. - Marked many functions as constant.
- The
Read
implementation now callsrecv(2)
rather thanread(2)
. - Split the
impl
block for theSocket
type to create groupings for setting and getting different level socket options usingsetsockopt(2)
/getsockopt(2)
. - Updated
winapi
depdency to version 0.3.9 and dropped unused features.
- Removed the
-rs
suffix from the repository name. - BREAKING: Removed
SockAddr::from_raw_parts
, useSockAddr::init
instead. - BREAKING: Removed
Socket::into_*
functions and replaced them with aFrom
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 the Andoid, Fuchsia, Haiku, iOS, illumos, NetBSD and Redox (nightly only) targets.
- Correctly call
recv_from
inSocket::recv_from_with_flags
(calledrecv
previously). - Correctly call
send_to
inSocket::send_to_with_flags
(calledrecv
previously). - Use correct inmutable references in
Socket::send_with_flags
andSocket::send_out_of_band
. - Use
IPPROTO_IPV6
inSocket::join_multicast_v6
on Windows. - Use
c_int
instead ofi32
where appropriate.
- Fixes the Fuchsia target.
Socket::device
now returns aVec<u8>
rather thanCString
.Socket::bind_device
now accepts a&[u8]
rather than&CStr
.
Socket::connect_timeout
was added back.
- Changed
Socket::set_cpu_affinity
andSocket::cpu_affinity
to use an immutable reference.
- Use
SO_LINGER_SEC
on macOS forSocket::get/set_linger
.
- Don't assume the memory layout of
std::net::SocketAddr
. - Other changes omited