Skip to content

Commit 4573da6

Browse files
committed
auto merge of #19334 : alexcrichton/rust/issue-19333, r=aturon
This may have inadvertently switched during the runtime overhaul, so this switches TcpListener back to using sockets instead of file descriptors. This also renames a bunch of variables called `fd` to `socket` to clearly show that it's not a file descriptor. Closes #19333
2 parents 5263600 + d6d4088 commit 4573da6

File tree

2 files changed

+24
-20
lines changed

2 files changed

+24
-20
lines changed

src/libstd/sys/windows/ext.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ impl AsRawSocket for io::net::tcp::TcpStream {
7676

7777
impl AsRawSocket for io::net::tcp::TcpListener {
7878
fn as_raw_socket(&self) -> Socket {
79-
self.as_inner().fd()
79+
self.as_inner().socket()
8080
}
8181
}
8282

8383
impl AsRawSocket for io::net::tcp::TcpAcceptor {
8484
fn as_raw_socket(&self) -> Socket {
85-
self.as_inner().fd()
85+
self.as_inner().socket()
8686
}
8787
}
8888

src/libstd/sys/windows/tcp.rs

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,37 +48,35 @@ impl Drop for Event {
4848
// TCP listeners
4949
////////////////////////////////////////////////////////////////////////////////
5050

51-
pub struct TcpListener {
52-
inner: FileDesc,
53-
}
51+
pub struct TcpListener { sock: sock_t }
5452

5553
impl TcpListener {
5654
pub fn bind(addr: ip::SocketAddr) -> IoResult<TcpListener> {
5755
sys::init_net();
5856

59-
let fd = try!(socket(addr, libc::SOCK_STREAM));
60-
let ret = TcpListener { inner: FileDesc::new(fd as libc::c_int, true) };
57+
let sock = try!(socket(addr, libc::SOCK_STREAM));
58+
let ret = TcpListener { sock: sock };
6159

6260
let mut storage = unsafe { mem::zeroed() };
6361
let len = addr_to_sockaddr(addr, &mut storage);
6462
let addrp = &storage as *const _ as *const libc::sockaddr;
6563

66-
match unsafe { libc::bind(fd, addrp, len) } {
64+
match unsafe { libc::bind(sock, addrp, len) } {
6765
-1 => Err(last_net_error()),
6866
_ => Ok(ret),
6967
}
7068
}
7169

72-
pub fn fd(&self) -> sock_t { self.inner.fd as sock_t }
70+
pub fn socket(&self) -> sock_t { self.sock }
7371

7472
pub fn listen(self, backlog: int) -> IoResult<TcpAcceptor> {
75-
match unsafe { libc::listen(self.fd(), backlog as libc::c_int) } {
73+
match unsafe { libc::listen(self.socket(), backlog as libc::c_int) } {
7674
-1 => Err(last_net_error()),
7775

7876
_ => {
7977
let accept = try!(Event::new());
8078
let ret = unsafe {
81-
c::WSAEventSelect(self.fd(), accept.handle(), c::FD_ACCEPT)
79+
c::WSAEventSelect(self.socket(), accept.handle(), c::FD_ACCEPT)
8280
};
8381
if ret != 0 {
8482
return Err(last_net_error())
@@ -97,7 +95,13 @@ impl TcpListener {
9795
}
9896

9997
pub fn socket_name(&mut self) -> IoResult<ip::SocketAddr> {
100-
sockname(self.fd(), libc::getsockname)
98+
sockname(self.socket(), libc::getsockname)
99+
}
100+
}
101+
102+
impl Drop for TcpListener {
103+
fn drop(&mut self) {
104+
unsafe { super::close_sock(self.sock); }
101105
}
102106
}
103107

@@ -114,7 +118,7 @@ struct AcceptorInner {
114118
}
115119

116120
impl TcpAcceptor {
117-
pub fn fd(&self) -> sock_t { self.inner.listener.fd() }
121+
pub fn socket(&self) -> sock_t { self.inner.listener.socket() }
118122

119123
pub fn accept(&mut self) -> IoResult<TcpStream> {
120124
// Unlink unix, windows cannot invoke `select` on arbitrary file
@@ -161,27 +165,27 @@ impl TcpAcceptor {
161165

162166
let mut wsaevents: c::WSANETWORKEVENTS = unsafe { mem::zeroed() };
163167
let ret = unsafe {
164-
c::WSAEnumNetworkEvents(self.fd(), events[1], &mut wsaevents)
168+
c::WSAEnumNetworkEvents(self.socket(), events[1], &mut wsaevents)
165169
};
166170
if ret != 0 { return Err(last_net_error()) }
167171

168172
if wsaevents.lNetworkEvents & c::FD_ACCEPT == 0 { continue }
169173
match unsafe {
170-
libc::accept(self.fd(), ptr::null_mut(), ptr::null_mut())
174+
libc::accept(self.socket(), ptr::null_mut(), ptr::null_mut())
171175
} {
172176
-1 if wouldblock() => {}
173177
-1 => return Err(last_net_error()),
174178

175179
// Accepted sockets inherit the same properties as the caller,
176180
// so we need to deregister our event and switch the socket back
177181
// to blocking mode
178-
fd => {
179-
let stream = TcpStream::new(fd);
182+
socket => {
183+
let stream = TcpStream::new(socket);
180184
let ret = unsafe {
181-
c::WSAEventSelect(fd, events[1], 0)
185+
c::WSAEventSelect(socket, events[1], 0)
182186
};
183187
if ret != 0 { return Err(last_net_error()) }
184-
try!(set_nonblocking(fd, false));
188+
try!(set_nonblocking(socket, false));
185189
return Ok(stream)
186190
}
187191
}
@@ -191,7 +195,7 @@ impl TcpAcceptor {
191195
}
192196

193197
pub fn socket_name(&mut self) -> IoResult<ip::SocketAddr> {
194-
sockname(self.fd(), libc::getsockname)
198+
sockname(self.socket(), libc::getsockname)
195199
}
196200

197201
pub fn set_timeout(&mut self, timeout: Option<u64>) {

0 commit comments

Comments
 (0)