MCPcopy Index your code
hub / github.com/RustPython/RustPython / initialize_winsock_extensions

Function initialize_winsock_extensions

crates/stdlib/src/overlapped.rs:58–139  ·  view source on GitHub ↗
(vm: &VirtualMachine)

Source from the content-addressed store, hash-verified

56 static TRANSMIT_FILE: std::sync::OnceLock<usize> = std::sync::OnceLock::new();
57
58 fn initialize_winsock_extensions(vm: &VirtualMachine) -> PyResult<()> {
59 use windows_sys::Win32::Networking::WinSock::{
60 INVALID_SOCKET, IPPROTO_TCP, SIO_GET_EXTENSION_FUNCTION_POINTER, SOCK_STREAM,
61 SOCKET_ERROR, WSAGetLastError, WSAIoctl, closesocket, socket,
62 };
63
64 // GUIDs for extension functions
65 const WSAID_ACCEPTEX: windows_sys::core::GUID = windows_sys::core::GUID {
66 data1: 0xb5367df1,
67 data2: 0xcbac,
68 data3: 0x11cf,
69 data4: [0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92],
70 };
71 const WSAID_CONNECTEX: windows_sys::core::GUID = windows_sys::core::GUID {
72 data1: 0x25a207b9,
73 data2: 0xddf3,
74 data3: 0x4660,
75 data4: [0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e],
76 };
77 const WSAID_DISCONNECTEX: windows_sys::core::GUID = windows_sys::core::GUID {
78 data1: 0x7fda2e11,
79 data2: 0x8630,
80 data3: 0x436f,
81 data4: [0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57],
82 };
83 const WSAID_TRANSMITFILE: windows_sys::core::GUID = windows_sys::core::GUID {
84 data1: 0xb5367df0,
85 data2: 0xcbac,
86 data3: 0x11cf,
87 data4: [0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92],
88 };
89
90 // Check all four locks to prevent partial initialization
91 if ACCEPT_EX.get().is_some()
92 && CONNECT_EX.get().is_some()
93 && DISCONNECT_EX.get().is_some()
94 && TRANSMIT_FILE.get().is_some()
95 {
96 return Ok(());
97 }
98
99 let s = unsafe { socket(AF_INET as i32, SOCK_STREAM, IPPROTO_TCP) };
100 if s == INVALID_SOCKET {
101 let err = unsafe { WSAGetLastError() } as u32;
102 return Err(set_from_windows_err(err, vm));
103 }
104
105 let mut dw_bytes: u32 = 0;
106
107 macro_rules! get_extension {
108 ($guid:expr, $lock:expr) => {{
109 let mut func_ptr: usize = 0;
110 let ret = unsafe {
111 WSAIoctl(
112 s,
113 SIO_GET_EXTENSION_FUNCTION_POINTER,
114 &$guid as *const _ as *const _,
115 core::mem::size_of_val(&$guid) as u32,

Callers 1

module_execFunction · 0.85

Calls 5

set_from_windows_errFunction · 0.85
closesocketFunction · 0.85
socketClass · 0.50
ErrClass · 0.50
getMethod · 0.45

Tested by

no test coverage detected