Skip to content

Commit eb19bd3

Browse files
committed
Abstract over internal SOCKET type
This allows `SOCKET` to be `usize` internally
1 parent d9c85da commit eb19bd3

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

Diff for: library/std/src/os/windows/io/socket.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ impl BorrowedSocket<'_> {
116116
let mut info = unsafe { mem::zeroed::<sys::c::WSAPROTOCOL_INFOW>() };
117117
let result = unsafe {
118118
sys::c::WSADuplicateSocketW(
119-
self.as_raw_socket(),
119+
self.as_raw_socket() as sys::c::SOCKET,
120120
sys::c::GetCurrentProcessId(),
121121
&mut info,
122122
)
@@ -134,7 +134,7 @@ impl BorrowedSocket<'_> {
134134
};
135135

136136
if socket != sys::c::INVALID_SOCKET {
137-
unsafe { Ok(OwnedSocket::from_raw_socket(socket)) }
137+
unsafe { Ok(OwnedSocket::from_raw_socket(socket as RawSocket)) }
138138
} else {
139139
let error = unsafe { sys::c::WSAGetLastError() };
140140

@@ -158,7 +158,7 @@ impl BorrowedSocket<'_> {
158158
}
159159

160160
unsafe {
161-
let socket = OwnedSocket::from_raw_socket(socket);
161+
let socket = OwnedSocket::from_raw_socket(socket as RawSocket);
162162
socket.set_no_inherit()?;
163163
Ok(socket)
164164
}
@@ -211,7 +211,7 @@ impl Drop for OwnedSocket {
211211
#[inline]
212212
fn drop(&mut self) {
213213
unsafe {
214-
let _ = sys::c::closesocket(self.socket);
214+
let _ = sys::c::closesocket(self.socket as sys::c::SOCKET);
215215
}
216216
}
217217
}

Diff for: library/std/src/sys/windows/net.rs

+22-16
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ impl Socket {
117117
};
118118

119119
if socket != c::INVALID_SOCKET {
120-
unsafe { Ok(Self::from_raw_socket(socket)) }
120+
unsafe { Ok(Self::from_raw(socket)) }
121121
} else {
122122
let error = unsafe { c::WSAGetLastError() };
123123

@@ -133,7 +133,7 @@ impl Socket {
133133
}
134134

135135
unsafe {
136-
let socket = Self::from_raw_socket(socket);
136+
let socket = Self::from_raw(socket);
137137
socket.0.set_no_inherit()?;
138138
Ok(socket)
139139
}
@@ -144,7 +144,7 @@ impl Socket {
144144
self.set_nonblocking(true)?;
145145
let result = {
146146
let (addr, len) = addr.into_inner();
147-
let result = unsafe { c::connect(self.as_raw_socket(), addr.as_ptr(), len) };
147+
let result = unsafe { c::connect(self.as_raw(), addr.as_ptr(), len) };
148148
cvt(result).map(drop)
149149
};
150150
self.set_nonblocking(false)?;
@@ -170,7 +170,7 @@ impl Socket {
170170
let fds = {
171171
let mut fds = unsafe { mem::zeroed::<c::fd_set>() };
172172
fds.fd_count = 1;
173-
fds.fd_array[0] = self.as_raw_socket();
173+
fds.fd_array[0] = self.as_raw();
174174
fds
175175
};
176176

@@ -202,11 +202,11 @@ impl Socket {
202202
}
203203

204204
pub fn accept(&self, storage: *mut c::SOCKADDR, len: *mut c_int) -> io::Result<Socket> {
205-
let socket = unsafe { c::accept(self.as_raw_socket(), storage, len) };
205+
let socket = unsafe { c::accept(self.as_raw(), storage, len) };
206206

207207
match socket {
208208
c::INVALID_SOCKET => Err(last_error()),
209-
_ => unsafe { Ok(Self::from_raw_socket(socket)) },
209+
_ => unsafe { Ok(Self::from_raw(socket)) },
210210
}
211211
}
212212

@@ -218,9 +218,8 @@ impl Socket {
218218
// On unix when a socket is shut down all further reads return 0, so we
219219
// do the same on windows to map a shut down socket to returning EOF.
220220
let length = cmp::min(buf.capacity(), i32::MAX as usize) as i32;
221-
let result = unsafe {
222-
c::recv(self.as_raw_socket(), buf.as_mut().as_mut_ptr() as *mut _, length, flags)
223-
};
221+
let result =
222+
unsafe { c::recv(self.as_raw(), buf.as_mut().as_mut_ptr() as *mut _, length, flags) };
224223

225224
match result {
226225
c::SOCKET_ERROR => {
@@ -257,7 +256,7 @@ impl Socket {
257256
let mut flags = 0;
258257
let result = unsafe {
259258
c::WSARecv(
260-
self.as_raw_socket(),
259+
self.as_raw(),
261260
bufs.as_mut_ptr() as *mut c::WSABUF,
262261
length,
263262
&mut nread,
@@ -305,7 +304,7 @@ impl Socket {
305304
// do the same on windows to map a shut down socket to returning EOF.
306305
let result = unsafe {
307306
c::recvfrom(
308-
self.as_raw_socket(),
307+
self.as_raw(),
309308
buf.as_mut_ptr() as *mut _,
310309
length,
311310
flags,
@@ -341,7 +340,7 @@ impl Socket {
341340
let mut nwritten = 0;
342341
let result = unsafe {
343342
c::WSASend(
344-
self.as_raw_socket(),
343+
self.as_raw(),
345344
bufs.as_ptr() as *const c::WSABUF as *mut _,
346345
length,
347346
&mut nwritten,
@@ -392,14 +391,14 @@ impl Socket {
392391
Shutdown::Read => c::SD_RECEIVE,
393392
Shutdown::Both => c::SD_BOTH,
394393
};
395-
let result = unsafe { c::shutdown(self.as_raw_socket(), how) };
394+
let result = unsafe { c::shutdown(self.as_raw(), how) };
396395
cvt(result).map(drop)
397396
}
398397

399398
pub fn set_nonblocking(&self, nonblocking: bool) -> io::Result<()> {
400399
let mut nonblocking = nonblocking as c_ulong;
401400
let result =
402-
unsafe { c::ioctlsocket(self.as_raw_socket(), c::FIONBIO as c_int, &mut nonblocking) };
401+
unsafe { c::ioctlsocket(self.as_raw(), c::FIONBIO as c_int, &mut nonblocking) };
403402
cvt(result).map(drop)
404403
}
405404

@@ -433,8 +432,15 @@ impl Socket {
433432
}
434433

435434
// This is used by sys_common code to abstract over Windows and Unix.
436-
pub fn as_raw(&self) -> RawSocket {
437-
self.as_inner().as_raw_socket()
435+
pub fn as_raw(&self) -> c::SOCKET {
436+
debug_assert_eq!(mem::size_of::<c::SOCKET>(), mem::size_of::<RawSocket>());
437+
debug_assert_eq!(mem::align_of::<c::SOCKET>(), mem::align_of::<RawSocket>());
438+
self.as_inner().as_raw_socket() as c::SOCKET
439+
}
440+
pub unsafe fn from_raw(raw: c::SOCKET) -> Self {
441+
debug_assert_eq!(mem::size_of::<c::SOCKET>(), mem::size_of::<RawSocket>());
442+
debug_assert_eq!(mem::align_of::<c::SOCKET>(), mem::align_of::<RawSocket>());
443+
Self::from_raw_socket(raw as RawSocket)
438444
}
439445
}
440446

0 commit comments

Comments
 (0)