Skip to content

Commit ff5acc2

Browse files
committed
code polish
1 parent 4e3857a commit ff5acc2

File tree

21 files changed

+190
-350
lines changed

21 files changed

+190
-350
lines changed

core/src/net/operator/windows/mod.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use windows_sys::Win32::Networking::WinSock::{
1414
getsockopt, setsockopt, AcceptEx, WSAGetLastError, WSARecv, WSASend, WSASocketW,
1515
INVALID_SOCKET, LPCONDITIONPROC, LPWSAOVERLAPPED_COMPLETION_ROUTINE, SEND_RECV_FLAGS, SOCKADDR,
1616
SOCKADDR_IN, SOCKET, SOCKET_ERROR, SOL_SOCKET, SO_PROTOCOL_INFO, SO_UPDATE_ACCEPT_CONTEXT,
17-
WSABUF, WSAPROTOCOL_INFOW, WSA_FLAG_OVERLAPPED, WSA_IO_PENDING,
17+
WSABUF, WSAEINPROGRESS, WSAENETDOWN, WSAPROTOCOL_INFOW, WSA_FLAG_OVERLAPPED, WSA_IO_PENDING,
1818
};
1919
use windows_sys::Win32::Storage::FileSystem::SetFileCompletionNotificationModes;
2020
use windows_sys::Win32::System::WindowsProgramming::FILE_SKIP_SET_EVENT_ON_HANDLE;
@@ -159,7 +159,6 @@ impl<'o> Operator<'o> {
159159
for entry in entries {
160160
let mut cqe = *Box::from_raw(entry.lpOverlapped.cast::<Overlapped>());
161161
// resolve completed read/write tasks
162-
// todo refactor IOCP impl
163162
cqe.result = match cqe.syscall_name {
164163
SyscallName::accept => {
165164
if setsockopt(
@@ -172,7 +171,7 @@ impl<'o> Operator<'o> {
172171
{
173172
cqe.socket.try_into().expect("result overflow")
174173
} else {
175-
-c_longlong::from(windows_sys::Win32::Foundation::GetLastError())
174+
-c_longlong::from(WSAENETDOWN)
176175
}
177176
}
178177
SyscallName::recv
@@ -183,7 +182,7 @@ impl<'o> Operator<'o> {
183182
if r > 0 {
184183
r
185184
} else {
186-
-c_longlong::from(windows_sys::Win32::Foundation::GetLastError())
185+
-c_longlong::from(WSAEINPROGRESS)
187186
}
188187
}
189188
_ => panic!("unsupported"),
@@ -364,6 +363,7 @@ impl<'o> Operator<'o> {
364363
overlapped.from_fd = fd;
365364
overlapped.token = user_data;
366365
overlapped.syscall_name = syscall_name;
366+
overlapped.result = -1;
367367
if WSARecv(
368368
fd,
369369
buf,
@@ -457,6 +457,7 @@ impl<'o> Operator<'o> {
457457
overlapped.from_fd = fd;
458458
overlapped.token = user_data;
459459
overlapped.syscall_name = syscall_name;
460+
overlapped.result = -1;
460461
if WSASend(
461462
fd,
462463
buf,

core/src/syscall/windows/CreateFileW.rs

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,11 @@
11
use std::ffi::c_uint;
2-
use once_cell::sync::Lazy;
32
use windows_sys::core::PCWSTR;
43
use windows_sys::Win32::Foundation::HANDLE;
54
use windows_sys::Win32::Security::SECURITY_ATTRIBUTES;
65
use windows_sys::Win32::Storage::FileSystem::{
76
FILE_CREATION_DISPOSITION, FILE_FLAGS_AND_ATTRIBUTES, FILE_SHARE_MODE,
87
};
98

10-
#[must_use]
11-
pub extern "system" fn CreateFileW(
12-
fn_ptr: Option<
13-
&extern "system" fn(
14-
PCWSTR,
15-
c_uint,
16-
FILE_SHARE_MODE,
17-
*const SECURITY_ATTRIBUTES,
18-
FILE_CREATION_DISPOSITION,
19-
FILE_FLAGS_AND_ATTRIBUTES,
20-
HANDLE,
21-
) -> HANDLE,
22-
>,
23-
lpfilename: PCWSTR,
24-
dwdesiredaccess: c_uint,
25-
dwsharemode: FILE_SHARE_MODE,
26-
lpsecurityattributes: *const SECURITY_ATTRIBUTES,
27-
dwcreationdisposition: FILE_CREATION_DISPOSITION,
28-
dwflagsandattributes: FILE_FLAGS_AND_ATTRIBUTES,
29-
htemplatefile: HANDLE,
30-
) -> HANDLE {
31-
static CHAIN: Lazy<CreateFileWSyscallFacade<RawCreateFileWSyscall>> =
32-
Lazy::new(Default::default);
33-
CHAIN.CreateFileW(
34-
fn_ptr,
35-
lpfilename,
36-
dwdesiredaccess,
37-
dwsharemode,
38-
lpsecurityattributes,
39-
dwcreationdisposition,
40-
dwflagsandattributes,
41-
htemplatefile
42-
)
43-
}
44-
459
trait CreateFileWSyscall {
4610
extern "system" fn CreateFileW(
4711
&self,
@@ -66,6 +30,18 @@ trait CreateFileWSyscall {
6630
) -> HANDLE;
6731
}
6832

33+
impl_syscall!(CreateFileWSyscallFacade, RawCreateFileWSyscall,
34+
CreateFileW(
35+
lpfilename: PCWSTR,
36+
dwdesiredaccess: c_uint,
37+
dwsharemode: FILE_SHARE_MODE,
38+
lpsecurityattributes: *const SECURITY_ATTRIBUTES,
39+
dwcreationdisposition: FILE_CREATION_DISPOSITION,
40+
dwflagsandattributes: FILE_FLAGS_AND_ATTRIBUTES,
41+
htemplatefile: HANDLE
42+
) -> HANDLE
43+
);
44+
6945
impl_facade!(CreateFileWSyscallFacade, CreateFileWSyscall,
7046
CreateFileW(
7147
lpfilename: PCWSTR,

core/src/syscall/windows/SetFilePointerEx.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,7 @@
11
use std::ffi::c_longlong;
2-
use once_cell::sync::Lazy;
32
use windows_sys::Win32::Foundation::{BOOL, HANDLE};
43
use windows_sys::Win32::Storage::FileSystem::SET_FILE_POINTER_MOVE_METHOD;
54

6-
#[must_use]
7-
pub extern "system" fn SetFilePointerEx(
8-
fn_ptr: Option<&extern "system" fn(HANDLE, c_longlong, *mut c_longlong, SET_FILE_POINTER_MOVE_METHOD) -> BOOL>,
9-
hfile: HANDLE,
10-
lidistancetomove: c_longlong,
11-
lpnewfilepointer: *mut c_longlong,
12-
dwmovemethod: SET_FILE_POINTER_MOVE_METHOD
13-
) -> BOOL {
14-
static CHAIN: Lazy<SetFilePointerExSyscallFacade<RawSetFilePointerExSyscall>> =
15-
Lazy::new(Default::default);
16-
CHAIN.SetFilePointerEx(fn_ptr, hfile, lidistancetomove, lpnewfilepointer, dwmovemethod)
17-
}
18-
195
trait SetFilePointerExSyscall {
206
extern "system" fn SetFilePointerEx(
217
&self,
@@ -27,6 +13,15 @@ trait SetFilePointerExSyscall {
2713
) -> BOOL;
2814
}
2915

16+
impl_syscall!(SetFilePointerExSyscallFacade, RawSetFilePointerExSyscall,
17+
SetFilePointerEx(
18+
hfile: HANDLE,
19+
lidistancetomove: c_longlong,
20+
lpnewfilepointer: *mut c_longlong,
21+
dwmovemethod: SET_FILE_POINTER_MOVE_METHOD
22+
) -> BOOL
23+
);
24+
3025
impl_facade!(SetFilePointerExSyscallFacade, SetFilePointerExSyscall,
3126
SetFilePointerEx(
3227
hfile: HANDLE,

core/src/syscall/windows/Sleep.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ use crate::net::EventLoops;
22
use once_cell::sync::Lazy;
33
use std::time::Duration;
44

5+
trait SleepSyscall {
6+
extern "system" fn Sleep(&self, fn_ptr: Option<&extern "system" fn(u32)>, dw_milliseconds: u32);
7+
}
8+
59
pub extern "system" fn Sleep(fn_ptr: Option<&extern "system" fn(u32)>, dw_milliseconds: u32) {
610
static CHAIN: Lazy<SleepSyscallFacade<NioSleepSyscall>> = Lazy::new(Default::default);
711
CHAIN.Sleep(fn_ptr, dw_milliseconds);
812
}
913

10-
trait SleepSyscall {
11-
extern "system" fn Sleep(&self, fn_ptr: Option<&extern "system" fn(u32)>, dw_milliseconds: u32);
12-
}
13-
1414
impl_facade!(SleepSyscallFacade, SleepSyscall,
1515
Sleep(dw_milliseconds: u32) -> ()
1616
);

core/src/syscall/windows/WSAAccept.rs

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,6 @@
1-
use once_cell::sync::Lazy;
21
use std::ffi::c_int;
32
use windows_sys::Win32::Networking::WinSock::{LPCONDITIONPROC, SOCKADDR, SOCKET};
43

5-
#[must_use]
6-
pub extern "system" fn WSAAccept(
7-
fn_ptr: Option<
8-
&extern "system" fn(
9-
SOCKET,
10-
*mut SOCKADDR,
11-
*mut c_int,
12-
LPCONDITIONPROC,
13-
usize
14-
) -> SOCKET
15-
>,
16-
fd: SOCKET,
17-
address: *mut SOCKADDR,
18-
address_len: *mut c_int,
19-
lpfncondition: LPCONDITIONPROC,
20-
dwcallbackdata: usize,
21-
) -> SOCKET {
22-
static CHAIN: Lazy<WSAAcceptSyscallFacade<NioWSAAcceptSyscall<RawWSAAcceptSyscall>>> =
23-
Lazy::new(Default::default);
24-
CHAIN.WSAAccept(fn_ptr, fd, address, address_len, lpfncondition, dwcallbackdata)
25-
}
26-
274
trait WSAAcceptSyscall {
285
extern "system" fn WSAAccept(
296
&self,
@@ -44,6 +21,16 @@ trait WSAAcceptSyscall {
4421
) -> SOCKET;
4522
}
4623

24+
impl_syscall!(WSAAcceptSyscallFacade, NioWSAAcceptSyscall, RawWSAAcceptSyscall,
25+
WSAAccept(
26+
fd: SOCKET,
27+
address: *mut SOCKADDR,
28+
address_len: *mut c_int,
29+
lpfncondition: LPCONDITIONPROC,
30+
dwcallbackdata: usize
31+
) -> SOCKET
32+
);
33+
4734
impl_facade!(WSAAcceptSyscallFacade, WSAAcceptSyscall,
4835
WSAAccept(
4936
fd: SOCKET,

core/src/syscall/windows/WSAPoll.rs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,9 @@
11
use std::convert::TryInto;
22
use crate::net::EventLoops;
3-
use once_cell::sync::Lazy;
43
use std::ffi::{c_int, c_uint};
54
use std::time::Duration;
65
use windows_sys::Win32::Networking::WinSock::WSAPOLLFD;
76

8-
#[must_use]
9-
pub extern "system" fn WSAPoll(
10-
fn_ptr: Option<&extern "system" fn(*mut WSAPOLLFD, c_uint, c_int) -> c_int>,
11-
fds: *mut WSAPOLLFD,
12-
nfds: c_uint,
13-
timeout: c_int,
14-
) -> c_int {
15-
static CHAIN: Lazy<PollSyscallFacade<NioPollSyscall<RawPollSyscall>>> =
16-
Lazy::new(Default::default);
17-
CHAIN.WSAPoll(fn_ptr, fds, nfds, timeout)
18-
}
19-
207
trait PollSyscall {
218
extern "system" fn WSAPoll(
229
&self,
@@ -27,6 +14,10 @@ trait PollSyscall {
2714
) -> c_int;
2815
}
2916

17+
impl_syscall!(PollSyscallFacade, NioPollSyscall, RawPollSyscall,
18+
WSAPoll(fds: *mut WSAPOLLFD, nfds: c_uint, timeout: c_int) -> c_int
19+
);
20+
3021
impl_facade!(PollSyscallFacade, PollSyscall,
3122
WSAPoll(fds: *mut WSAPOLLFD, nfds: c_uint, timeout: c_int) -> c_int
3223
);

core/src/syscall/windows/WSARecv.rs

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,7 @@
1-
use once_cell::sync::Lazy;
21
use std::ffi::{c_int, c_uint};
32
use windows_sys::Win32::Networking::WinSock::{LPWSAOVERLAPPED_COMPLETION_ROUTINE, SOCKET, WSABUF};
43
use windows_sys::Win32::System::IO::OVERLAPPED;
54

6-
#[must_use]
7-
pub extern "system" fn WSARecv(
8-
fn_ptr: Option<
9-
&extern "system" fn(
10-
SOCKET,
11-
*const WSABUF,
12-
c_uint,
13-
*mut c_uint,
14-
*mut c_uint,
15-
*mut OVERLAPPED,
16-
LPWSAOVERLAPPED_COMPLETION_ROUTINE,
17-
) -> c_int,
18-
>,
19-
fd: SOCKET,
20-
buf: *const WSABUF,
21-
dwbuffercount: c_uint,
22-
lpnumberofbytesrecvd: *mut c_uint,
23-
lpflags: *mut c_uint,
24-
lpoverlapped: *mut OVERLAPPED,
25-
lpcompletionroutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
26-
) -> c_int {
27-
static CHAIN: Lazy<WSARecvSyscallFacade<NioWSARecvSyscall<RawWSARecvSyscall>>> =
28-
Lazy::new(Default::default);
29-
CHAIN.WSARecv(
30-
fn_ptr,
31-
fd,
32-
buf,
33-
dwbuffercount,
34-
lpnumberofbytesrecvd,
35-
lpflags,
36-
lpoverlapped,
37-
lpcompletionroutine,
38-
)
39-
}
40-
415
trait WSARecvSyscall {
426
extern "system" fn WSARecv(
437
&self,
@@ -62,6 +26,18 @@ trait WSARecvSyscall {
6226
) -> c_int;
6327
}
6428

29+
impl_syscall!(WSARecvSyscallFacade, NioWSARecvSyscall, RawWSARecvSyscall,
30+
WSARecv(
31+
fd: SOCKET,
32+
buf: *const WSABUF,
33+
dwbuffercount: c_uint,
34+
lpnumberofbytesrecvd: *mut c_uint,
35+
lpflags: *mut c_uint,
36+
lpoverlapped: *mut OVERLAPPED,
37+
lpcompletionroutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE
38+
) -> c_int
39+
);
40+
6541
impl_facade!(WSARecvSyscallFacade, WSARecvSyscall,
6642
WSARecv(
6743
fd: SOCKET,

0 commit comments

Comments
 (0)