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

Method WSARecvFrom

crates/stdlib/src/overlapped.rs:1311–1394  ·  view source on GitHub ↗
(
            zelf: &Py<Self>,
            handle: isize,
            size: u32,
            flags: OptionalArg<u32>,
            vm: &VirtualMachine,
        )

Source from the content-addressed store, hash-verified

1309 // WSARecvFrom
1310 #[pymethod]
1311 fn WSARecvFrom(
1312 zelf: &Py<Self>,
1313 handle: isize,
1314 size: u32,
1315 flags: OptionalArg<u32>,
1316 vm: &VirtualMachine,
1317 ) -> PyResult {
1318 use windows_sys::Win32::Foundation::{
1319 ERROR_BROKEN_PIPE, ERROR_IO_PENDING, ERROR_MORE_DATA, ERROR_SUCCESS,
1320 };
1321 use windows_sys::Win32::Networking::WinSock::{WSABUF, WSAGetLastError, WSARecvFrom};
1322
1323 let mut inner = zelf.inner.lock();
1324 if !matches!(inner.data, OverlappedData::None) {
1325 return Err(vm.new_value_error("operation already attempted"));
1326 }
1327
1328 let mut flags = flags.unwrap_or(0);
1329
1330 #[cfg(target_pointer_width = "32")]
1331 let size = core::cmp::min(size, isize::MAX as u32);
1332
1333 let buf = vec![0u8; core::cmp::max(size, 1) as usize];
1334 let buf = vm.ctx.new_bytes(buf);
1335 inner.handle = handle as HANDLE;
1336
1337 let address: SOCKADDR_IN6 = unsafe { core::mem::zeroed() };
1338 let address_length = core::mem::size_of::<SOCKADDR_IN6>() as i32;
1339
1340 inner.data = OverlappedData::ReadFrom(OverlappedReadFrom {
1341 result: None,
1342 allocated_buffer: buf.clone(),
1343 address,
1344 address_length,
1345 });
1346
1347 let wsabuf = WSABUF {
1348 buf: buf.as_bytes().as_ptr() as *mut _,
1349 len: size,
1350 };
1351 let mut nread: u32 = 0;
1352
1353 // Get mutable reference to address in inner.data
1354 let (addr_ptr, addr_len_ptr) = match &mut inner.data {
1355 OverlappedData::ReadFrom(rf) => (
1356 &mut rf.address as *mut SOCKADDR_IN6,
1357 &mut rf.address_length as *mut i32,
1358 ),
1359 _ => unreachable!(),
1360 };
1361
1362 let ret = unsafe {
1363 WSARecvFrom(
1364 handle as _,
1365 &wsabuf,
1366 1,
1367 &mut nread,
1368 &mut flags,

Callers 1

recvfromMethod · 0.95

Calls 10

minFunction · 0.85
mark_as_completedFunction · 0.85
set_from_windows_errFunction · 0.85
noneMethod · 0.80
ErrClass · 0.50
lockMethod · 0.45
new_bytesMethod · 0.45
cloneMethod · 0.45
as_ptrMethod · 0.45
as_bytesMethod · 0.45

Tested by

no test coverage detected