Skip to content

Commit 7c708a4

Browse files
committed
basic support IOCP Operator
1 parent 67895b4 commit 7c708a4

File tree

2 files changed

+139
-172
lines changed

2 files changed

+139
-172
lines changed

core/src/net/event_loop.rs

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ cfg_if::cfg_if! {
3030
use std::ffi::{c_longlong, c_uint};
3131
use windows_sys::core::{PCSTR, PSTR};
3232
use windows_sys::Win32::Networking::WinSock::{
33-
setsockopt, LPWSAOVERLAPPED_COMPLETION_ROUTINE, SEND_RECV_FLAGS, SOCKADDR, SOCKET, SOL_SOCKET,
34-
SO_UPDATE_ACCEPT_CONTEXT, WSABUF,
33+
LPWSAOVERLAPPED_COMPLETION_ROUTINE, SEND_RECV_FLAGS, SOCKADDR, SOCKET, WSABUF,
3534
};
3635
use windows_sys::Win32::System::IO::OVERLAPPED;
3736
}
@@ -301,34 +300,10 @@ impl<'e> EventLoop<'e> {
301300
if count > 0 {
302301
for cqe in &mut cq {
303302
let token = cqe.token;
304-
let bytes_transferred = cqe.bytes_transferred;
305-
// resolve completed read/write tasks
306-
// todo refactor IOCP impl
307-
let result = match cqe.syscall_name {
308-
SyscallName::accept => unsafe {
309-
if setsockopt(
310-
cqe.socket,
311-
SOL_SOCKET,
312-
SO_UPDATE_ACCEPT_CONTEXT,
313-
std::ptr::from_ref(&cqe.from_fd).cast(),
314-
c_int::try_from(size_of::<SOCKET>()).expect("overflow"),
315-
) == 0
316-
{
317-
cqe.socket.try_into().expect("result overflow")
318-
} else {
319-
-c_longlong::from(windows_sys::Win32::Foundation::GetLastError())
320-
}
321-
},
322-
SyscallName::recv
323-
| SyscallName::WSARecv
324-
| SyscallName::send
325-
| SyscallName::WSASend => bytes_transferred.into(),
326-
_ => panic!("unsupported"),
327-
};
328303
if let Some((_, pair)) = self.syscall_wait_table.remove(&token) {
329304
let (lock, cvar) = &*pair;
330305
let mut pending = lock.lock().expect("lock failed");
331-
*pending = Some(result);
306+
*pending = Some(cqe.result);
332307
cvar.notify_one();
333308
}
334309
unsafe { self.resume(token) };

0 commit comments

Comments
 (0)