Skip to content

Commit 2815b32

Browse files
committed
Convert winsock calls to WSA...A
1 parent b6ac86e commit 2815b32

File tree

5 files changed

+36
-7
lines changed

5 files changed

+36
-7
lines changed

library/std/src/fs/tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1855,7 +1855,7 @@ fn windows_unix_socket_exists() {
18551855
// std doesn't currently support Unix sockets on Windows so manually create one here.
18561856
net::init();
18571857
unsafe {
1858-
let socket = c::WSASocketW(
1858+
let socket = c::WSASocketA(
18591859
c::AF_UNIX as i32,
18601860
c::SOCK_STREAM,
18611861
0,

library/std/src/os/windows/io/socket.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,17 @@ impl BorrowedSocket<'_> {
110110
/// object as the existing `BorrowedSocket` instance.
111111
#[stable(feature = "io_safety", since = "1.63.0")]
112112
pub fn try_clone_to_owned(&self) -> io::Result<OwnedSocket> {
113-
let mut info = unsafe { mem::zeroed::<sys::c::WSAPROTOCOL_INFOW>() };
113+
let mut info = unsafe { mem::zeroed::<sys::c::WSAPROTOCOL_INFOA>() };
114114
let result = unsafe {
115-
sys::c::WSADuplicateSocketW(
115+
sys::c::WSADuplicateSocketA(
116116
self.as_raw_socket() as sys::c::SOCKET,
117117
sys::c::GetCurrentProcessId(),
118118
&mut info,
119119
)
120120
};
121121
sys::net::cvt(result)?;
122122
let socket = unsafe {
123-
sys::c::WSASocketW(
123+
sys::c::WSASocketA(
124124
info.iAddressFamily,
125125
info.iSocketType,
126126
info.iProtocol,
@@ -140,7 +140,7 @@ impl BorrowedSocket<'_> {
140140
}
141141

142142
let socket = unsafe {
143-
sys::c::WSASocketW(
143+
sys::c::WSASocketA(
144144
info.iAddressFamily,
145145
info.iSocketType,
146146
info.iProtocol,

library/std/src/sys/pal/windows/c/bindings.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2119,6 +2119,7 @@ Windows.Win32.Networking.WinSock.WSABASEERR
21192119
Windows.Win32.Networking.WinSock.WSABUF
21202120
Windows.Win32.Networking.WinSock.WSACleanup
21212121
Windows.Win32.Networking.WinSock.WSADATA
2122+
Windows.Win32.Networking.WinSock.WSADuplicateSocketA
21222123
Windows.Win32.Networking.WinSock.WSADuplicateSocketW
21232124
Windows.Win32.Networking.WinSock.WSAEACCES
21242125
Windows.Win32.Networking.WinSock.WSAEADDRINUSE
@@ -2175,11 +2176,13 @@ Windows.Win32.Networking.WinSock.WSAHOST_NOT_FOUND
21752176
Windows.Win32.Networking.WinSock.WSANO_DATA
21762177
Windows.Win32.Networking.WinSock.WSANO_RECOVERY
21772178
Windows.Win32.Networking.WinSock.WSANOTINITIALISED
2179+
Windows.Win32.Networking.WinSock.WSAPROTOCOL_INFOA
21782180
Windows.Win32.Networking.WinSock.WSAPROTOCOL_INFOW
21792181
Windows.Win32.Networking.WinSock.WSAPROTOCOLCHAIN
21802182
Windows.Win32.Networking.WinSock.WSARecv
21812183
Windows.Win32.Networking.WinSock.WSASend
21822184
Windows.Win32.Networking.WinSock.WSASERVICE_NOT_FOUND
2185+
Windows.Win32.Networking.WinSock.WSASocketA
21832186
Windows.Win32.Networking.WinSock.WSASocketW
21842187
Windows.Win32.Networking.WinSock.WSAStartup
21852188
Windows.Win32.Networking.WinSock.WSASYSCALLFAILURE

library/std/src/sys/pal/windows/c/windows_sys.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,12 @@ windows_targets::link!("ntdll.dll" "system" fn NtWriteFile(filehandle : HANDLE,
134134
windows_targets::link!("ntdll.dll" "system" fn RtlNtStatusToDosError(status : NTSTATUS) -> u32);
135135
windows_targets::link!("userenv.dll" "system" fn GetUserProfileDirectoryW(htoken : HANDLE, lpprofiledir : PWSTR, lpcchsize : *mut u32) -> BOOL);
136136
windows_targets::link!("ws2_32.dll" "system" fn WSACleanup() -> i32);
137+
windows_targets::link!("ws2_32.dll" "system" fn WSADuplicateSocketA(s : SOCKET, dwprocessid : u32, lpprotocolinfo : *mut WSAPROTOCOL_INFOA) -> i32);
137138
windows_targets::link!("ws2_32.dll" "system" fn WSADuplicateSocketW(s : SOCKET, dwprocessid : u32, lpprotocolinfo : *mut WSAPROTOCOL_INFOW) -> i32);
138139
windows_targets::link!("ws2_32.dll" "system" fn WSAGetLastError() -> WSA_ERROR);
139140
windows_targets::link!("ws2_32.dll" "system" fn WSARecv(s : SOCKET, lpbuffers : *const WSABUF, dwbuffercount : u32, lpnumberofbytesrecvd : *mut u32, lpflags : *mut u32, lpoverlapped : *mut OVERLAPPED, lpcompletionroutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE) -> i32);
140141
windows_targets::link!("ws2_32.dll" "system" fn WSASend(s : SOCKET, lpbuffers : *const WSABUF, dwbuffercount : u32, lpnumberofbytessent : *mut u32, dwflags : u32, lpoverlapped : *mut OVERLAPPED, lpcompletionroutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE) -> i32);
142+
windows_targets::link!("ws2_32.dll" "system" fn WSASocketA(af : i32, r#type : i32, protocol : i32, lpprotocolinfo : *const WSAPROTOCOL_INFOA, g : u32, dwflags : u32) -> SOCKET);
141143
windows_targets::link!("ws2_32.dll" "system" fn WSASocketW(af : i32, r#type : i32, protocol : i32, lpprotocolinfo : *const WSAPROTOCOL_INFOW, g : u32, dwflags : u32) -> SOCKET);
142144
windows_targets::link!("ws2_32.dll" "system" fn WSAStartup(wversionrequested : u16, lpwsadata : *mut WSADATA) -> i32);
143145
windows_targets::link!("ws2_32.dll" "system" fn accept(s : SOCKET, addr : *mut SOCKADDR, addrlen : *mut i32) -> SOCKET);
@@ -3270,6 +3272,30 @@ pub struct WSAPROTOCOLCHAIN {
32703272
}
32713273
#[repr(C)]
32723274
#[derive(Clone, Copy)]
3275+
pub struct WSAPROTOCOL_INFOA {
3276+
pub dwServiceFlags1: u32,
3277+
pub dwServiceFlags2: u32,
3278+
pub dwServiceFlags3: u32,
3279+
pub dwServiceFlags4: u32,
3280+
pub dwProviderFlags: u32,
3281+
pub ProviderId: GUID,
3282+
pub dwCatalogEntryId: u32,
3283+
pub ProtocolChain: WSAPROTOCOLCHAIN,
3284+
pub iVersion: i32,
3285+
pub iAddressFamily: i32,
3286+
pub iMaxSockAddr: i32,
3287+
pub iMinSockAddr: i32,
3288+
pub iSocketType: i32,
3289+
pub iProtocol: i32,
3290+
pub iProtocolMaxOffset: i32,
3291+
pub iNetworkByteOrder: i32,
3292+
pub iSecurityScheme: i32,
3293+
pub dwMessageSize: u32,
3294+
pub dwProviderReserved: u32,
3295+
pub szProtocol: [i8; 256],
3296+
}
3297+
#[repr(C)]
3298+
#[derive(Clone, Copy)]
32733299
pub struct WSAPROTOCOL_INFOW {
32743300
pub dwServiceFlags1: u32,
32753301
pub dwServiceFlags2: u32,

library/std/src/sys/pal/windows/net.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ impl Socket {
189189
SocketAddr::V6(..) => netc::AF_INET6,
190190
};
191191
let socket = unsafe {
192-
c::WSASocketW(
192+
c::WSASocketA(
193193
family,
194194
ty,
195195
0,
@@ -209,7 +209,7 @@ impl Socket {
209209
}
210210

211211
let socket =
212-
unsafe { c::WSASocketW(family, ty, 0, ptr::null_mut(), 0, c::WSA_FLAG_OVERLAPPED) };
212+
unsafe { c::WSASocketA(family, ty, 0, ptr::null_mut(), 0, c::WSA_FLAG_OVERLAPPED) };
213213

214214
if socket == c::INVALID_SOCKET {
215215
return Err(last_error());

0 commit comments

Comments
 (0)