@@ -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
5553impl 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
116120impl 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