1
1
use std:: { mem, ptr, fmt} ;
2
- use std:: num:: Int ;
3
2
use libc:: { c_void, c_int, socklen_t, size_t, ssize_t} ;
4
- use fcntl:: { Fd , fcntl, F_SETFL , F_SETFD , FD_CLOEXEC , O_NONBLOCK } ;
3
+ use fcntl:: { Fd , fcntl, FD_CLOEXEC , O_NONBLOCK } ;
4
+ use fcntl:: FcntlArg :: { F_SETFD , F_SETFL } ;
5
5
use errno:: { SysResult , SysError , from_ffi} ;
6
6
use features;
7
7
@@ -257,6 +257,8 @@ pub fn listen(sockfd: Fd, backlog: uint) -> SysResult<()> {
257
257
}
258
258
259
259
pub fn bind ( sockfd : Fd , addr : & SockAddr ) -> SysResult < ( ) > {
260
+ use self :: SockAddr :: * ;
261
+
260
262
let res = unsafe {
261
263
match * addr {
262
264
SockIpV4 ( ref addr) => ffi:: bind ( sockfd, mem:: transmute ( addr) , mem:: size_of :: < sockaddr_in > ( ) as socklen_t ) ,
@@ -330,6 +332,8 @@ fn accept4_polyfill(sockfd: Fd, flags: SockFlag) -> SysResult<Fd> {
330
332
}
331
333
332
334
pub fn connect ( sockfd : Fd , addr : & SockAddr ) -> SysResult < ( ) > {
335
+ use self :: SockAddr :: * ;
336
+
333
337
let res = unsafe {
334
338
match * addr {
335
339
SockIpV4 ( ref addr) => ffi:: connect ( sockfd, mem:: transmute ( addr) , mem:: size_of :: < sockaddr_in > ( ) as socklen_t ) ,
@@ -344,7 +348,8 @@ pub fn connect(sockfd: Fd, addr: &SockAddr) -> SysResult<()> {
344
348
mod sa_helpers {
345
349
use std:: mem;
346
350
use libc:: { sockaddr_storage, sockaddr_in, sockaddr_in6, sockaddr_un} ;
347
- use super :: { SockAddr , SockIpV6 , SockIpV4 , SockUnix } ;
351
+ use super :: SockAddr ;
352
+ use super :: SockAddr :: * ;
348
353
349
354
pub fn to_sockaddr_ipv4 ( addr : & sockaddr_storage ) -> SockAddr {
350
355
let sin : & sockaddr_in = unsafe { mem:: transmute ( addr) } ;
@@ -385,6 +390,8 @@ pub fn recvfrom(sockfd: Fd, buf: &mut [u8]) -> SysResult<(uint, SockAddr)> {
385
390
}
386
391
387
392
fn print_ipv4_addr ( sin : & sockaddr_in , f : & mut fmt:: Formatter ) -> fmt:: Result {
393
+ use std:: num:: Int ;
394
+
388
395
let ip_addr = Int :: from_be ( sin. sin_addr . s_addr ) ;
389
396
let port = Int :: from_be ( sin. sin_port ) ;
390
397
@@ -399,7 +406,7 @@ fn print_ipv4_addr(sin: &sockaddr_in, f: &mut fmt::Formatter) -> fmt::Result {
399
406
impl fmt:: Show for SockAddr {
400
407
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
401
408
match * self {
402
- SockIpV4 ( sin) => print_ipv4_addr ( & sin, f) ,
409
+ SockAddr :: SockIpV4 ( sin) => print_ipv4_addr ( & sin, f) ,
403
410
_ => unimplemented ! ( )
404
411
}
405
412
}
@@ -420,6 +427,8 @@ fn sendto_sockaddr<T>(sockfd: Fd, buf: &[u8], flags: SockMessageFlags, addr: &T)
420
427
}
421
428
422
429
pub fn sendto ( sockfd : Fd , buf : & [ u8 ] , addr : & SockAddr , flags : SockMessageFlags ) -> SysResult < uint > {
430
+ use self :: SockAddr :: * ;
431
+
423
432
let ret = match * addr {
424
433
SockIpV4 ( ref addr) => sendto_sockaddr ( sockfd, buf, flags, addr) ,
425
434
SockIpV6 ( ref addr) => sendto_sockaddr ( sockfd, buf, flags, addr) ,
@@ -482,6 +491,8 @@ fn getsockname_sockaddr<T>(sockfd: Fd, addr: &T) -> SysResult<bool> {
482
491
}
483
492
484
493
pub fn getsockname ( sockfd : Fd , addr : & mut SockAddr ) -> SysResult < bool > {
494
+ use self :: SockAddr :: * ;
495
+
485
496
match * addr {
486
497
SockIpV4 ( ref addr) => getsockname_sockaddr ( sockfd, addr) ,
487
498
SockIpV6 ( ref addr) => getsockname_sockaddr ( sockfd, addr) ,
0 commit comments