Sha256: 6e546b42f50a851fc833c57cda76cfb347203ed4b0dea574a3d325bf5a2ebf80

Contents?: true

Size: 1.66 KB

Versions: 28

Compression:

Stored size: 1.66 KB

Contents

use crate::io;
use core::mem::MaybeUninit;
use windows_sys::Win32::Networking::WinSock::{WSACleanup, WSAGetLastError, WSAStartup, WSADATA};

/// `WSAStartup()`—Initialize process-wide Windows support for sockets.
///
/// On Windows, it's necessary to initialize the sockets subsystem before
/// using sockets APIs. The function performs the necessary initialization.
///
/// # References
///  - [Winsock2]
///
/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsastartup
pub fn wsa_startup() -> io::Result<WSADATA> {
    // Request version 2.2, which has been the latest version since far older
    // versions of Windows than we support here. For more information about
    // the version, see [here].
    //
    // [here]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsastartup#remarks
    let version = 0x202;
    let mut data = MaybeUninit::uninit();
    unsafe {
        let ret = WSAStartup(version, data.as_mut_ptr());
        if ret == 0 {
            Ok(data.assume_init())
        } else {
            Err(io::Errno::from_raw_os_error(WSAGetLastError()))
        }
    }
}

/// `WSACleanup()`—Clean up process-wide Windows support for sockets.
///
/// In a program where `init` is called, if sockets are no longer necessary,
/// this function releases associated resources.
///
/// # References
///  - [Winsock2]
///
/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsacleanup
pub fn wsa_cleanup() -> io::Result<()> {
    unsafe {
        if WSACleanup() == 0 {
            Ok(())
        } else {
            Err(io::Errno::from_raw_os_error(WSAGetLastError()))
        }
    }
}

Version data entries

28 entries across 19 versions & 1 rubygems

Version Path
wasmtime-14.0.4 ./ext/cargo-vendor/rustix-0.38.20/src/net/wsa.rs
wasmtime-14.0.3 ./ext/cargo-vendor/rustix-0.38.20/src/net/wsa.rs
wasmtime-14.0.1 ./ext/cargo-vendor/rustix-0.38.20/src/net/wsa.rs
wasmtime-14.0.0 ./ext/cargo-vendor/rustix-0.38.20/src/net/wsa.rs
wasmtime-13.0.0 ./ext/cargo-vendor/rustix-0.38.8/src/net/wsa.rs
wasmtime-13.0.0 ./ext/cargo-vendor/rustix-0.37.23/src/net/wsa.rs
wasmtime-12.0.1 ./ext/cargo-vendor/rustix-0.37.23/src/net/wsa.rs
wasmtime-12.0.1 ./ext/cargo-vendor/rustix-0.38.8/src/net/wsa.rs
wasmtime-12.0.0 ./ext/cargo-vendor/rustix-0.37.23/src/net/wsa.rs
wasmtime-12.0.0 ./ext/cargo-vendor/rustix-0.38.8/src/net/wsa.rs
wasmtime-11.0.0 ./ext/cargo-vendor/rustix-0.37.23/src/net/wsa.rs
wasmtime-11.0.0 ./ext/cargo-vendor/rustix-0.38.8/src/net/wsa.rs
wasmtime-10.0.1 ./ext/cargo-vendor/rustix-0.37.23/src/net/wsa.rs
wasmtime-10.0.1 ./ext/cargo-vendor/rustix-0.38.8/src/net/wsa.rs
wasmtime-10.0.0 ./ext/cargo-vendor/rustix-0.37.23/src/net/wsa.rs
wasmtime-10.0.0 ./ext/cargo-vendor/rustix-0.38.8/src/net/wsa.rs
wasmtime-9.0.4 ./ext/cargo-vendor/rustix-0.38.8/src/net/wsa.rs
wasmtime-9.0.4 ./ext/cargo-vendor/rustix-0.37.23/src/net/wsa.rs
wasmtime-9.0.1 ./ext/cargo-vendor/rustix-0.37.19/src/net/wsa.rs
wasmtime-8.0.0 ./ext/cargo-vendor/rustix-0.37.13/src/net/wsa.rs