88// option. This file may not be copied, modified, or distributed 
99// except according to those terms. 
1010
11- #![ unstable ( feature = "unix_socket_redox" ,  reason  = "new feature"  ,  issue= "51553 ") ]  
11+ #![ stable ( feature = "unix_socket_redox" ,  since  = "1.29 " ) ]  
1212
1313//! Unix-specific networking functionality 
1414
@@ -37,6 +37,7 @@ use sys::{cvt, fd::FileDesc, syscall};
3737/// let addr = socket.local_addr().expect("Couldn't get local address"); 
3838/// ``` 
3939#[ derive( Clone ) ]  
40+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
4041pub  struct  SocketAddr ( ( ) ) ; 
4142
4243impl  SocketAddr  { 
@@ -64,6 +65,7 @@ impl SocketAddr {
6465     /// let addr = socket.local_addr().expect("Couldn't get local address"); 
6566     /// assert_eq!(addr.as_pathname(), None); 
6667     /// ``` 
68+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
6769    pub  fn  as_pathname ( & self )  -> Option < & Path >  { 
6870        None 
6971    } 
@@ -91,10 +93,12 @@ impl SocketAddr {
9193     /// let addr = socket.local_addr().expect("Couldn't get local address"); 
9294     /// assert_eq!(addr.is_unnamed(), true); 
9395     /// ``` 
96+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
9497    pub  fn  is_unnamed ( & self )  -> bool  { 
9598        false 
9699    } 
97100} 
101+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
98102impl  fmt:: Debug  for  SocketAddr  { 
99103    fn  fmt ( & self ,  fmt :  & mut  fmt:: Formatter )  -> fmt:: Result  { 
100104        write ! ( fmt,  "SocketAddr" ) 
@@ -115,8 +119,10 @@ impl fmt::Debug for SocketAddr {
115119/// stream.read_to_string(&mut response).unwrap(); 
116120/// println!("{}", response); 
117121/// ``` 
122+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
118123pub  struct  UnixStream ( FileDesc ) ; 
119124
125+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
120126impl  fmt:: Debug  for  UnixStream  { 
121127    fn  fmt ( & self ,  fmt :  & mut  fmt:: Formatter )  -> fmt:: Result  { 
122128        let  mut  builder = fmt. debug_struct ( "UnixStream" ) ; 
@@ -147,6 +153,7 @@ impl UnixStream {
147153     ///     } 
148154     /// }; 
149155     /// ``` 
156+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
150157    pub  fn  connect < P :  AsRef < Path > > ( path :  P )  -> io:: Result < UnixStream >  { 
151158        if  let  Some ( s)  = path. as_ref ( ) . to_str ( )  { 
152159            cvt ( syscall:: open ( format ! ( "chan:{}" ,  s) ,  syscall:: O_CLOEXEC ) ) 
@@ -177,6 +184,7 @@ impl UnixStream {
177184     ///     } 
178185     /// }; 
179186     /// ``` 
187+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
180188    pub  fn  pair ( )  -> io:: Result < ( UnixStream ,  UnixStream ) >  { 
181189        let  server = cvt ( syscall:: open ( "chan:" ,  syscall:: O_CREAT  | syscall:: O_CLOEXEC ) ) 
182190            . map ( FileDesc :: new) ?; 
@@ -200,6 +208,7 @@ impl UnixStream {
200208     /// let socket = UnixStream::connect("/tmp/sock").unwrap(); 
201209     /// let sock_copy = socket.try_clone().expect("Couldn't clone socket"); 
202210     /// ``` 
211+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
203212    pub  fn  try_clone ( & self )  -> io:: Result < UnixStream >  { 
204213        self . 0 . duplicate ( ) . map ( UnixStream ) 
205214    } 
@@ -214,6 +223,7 @@ impl UnixStream {
214223     /// let socket = UnixStream::connect("/tmp/sock").unwrap(); 
215224     /// let addr = socket.local_addr().expect("Couldn't get local address"); 
216225     /// ``` 
226+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
217227    pub  fn  local_addr ( & self )  -> io:: Result < SocketAddr >  { 
218228        Err ( Error :: new ( ErrorKind :: Other ,  "UnixStream::local_addr unimplemented on redox" ) ) 
219229    } 
@@ -228,6 +238,7 @@ impl UnixStream {
228238     /// let socket = UnixStream::connect("/tmp/sock").unwrap(); 
229239     /// let addr = socket.peer_addr().expect("Couldn't get peer address"); 
230240     /// ``` 
241+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
231242    pub  fn  peer_addr ( & self )  -> io:: Result < SocketAddr >  { 
232243        Err ( Error :: new ( ErrorKind :: Other ,  "UnixStream::peer_addr unimplemented on redox" ) ) 
233244    } 
@@ -266,6 +277,7 @@ impl UnixStream {
266277     /// let err = result.unwrap_err(); 
267278     /// assert_eq!(err.kind(), io::ErrorKind::InvalidInput) 
268279     /// ``` 
280+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
269281    pub  fn  set_read_timeout ( & self ,  _timeout :  Option < Duration > )  -> io:: Result < ( ) >  { 
270282        Err ( Error :: new ( ErrorKind :: Other ,  "UnixStream::set_read_timeout unimplemented on redox" ) ) 
271283    } 
@@ -304,6 +316,7 @@ impl UnixStream {
304316     /// let err = result.unwrap_err(); 
305317     /// assert_eq!(err.kind(), io::ErrorKind::InvalidInput) 
306318     /// ``` 
319+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
307320    pub  fn  set_write_timeout ( & self ,  _timeout :  Option < Duration > )  -> io:: Result < ( ) >  { 
308321        Err ( Error :: new ( ErrorKind :: Other ,  "UnixStream::set_write_timeout unimplemented on redox" ) ) 
309322    } 
@@ -320,6 +333,7 @@ impl UnixStream {
320333     /// socket.set_read_timeout(Some(Duration::new(1, 0))).expect("Couldn't set read timeout"); 
321334     /// assert_eq!(socket.read_timeout().unwrap(), Some(Duration::new(1, 0))); 
322335     /// ``` 
336+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
323337    pub  fn  read_timeout ( & self )  -> io:: Result < Option < Duration > >  { 
324338        Err ( Error :: new ( ErrorKind :: Other ,  "UnixStream::read_timeout unimplemented on redox" ) ) 
325339    } 
@@ -336,6 +350,7 @@ impl UnixStream {
336350     /// socket.set_write_timeout(Some(Duration::new(1, 0))).expect("Couldn't set write timeout"); 
337351     /// assert_eq!(socket.write_timeout().unwrap(), Some(Duration::new(1, 0))); 
338352     /// ``` 
353+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
339354    pub  fn  write_timeout ( & self )  -> io:: Result < Option < Duration > >  { 
340355        Err ( Error :: new ( ErrorKind :: Other ,  "UnixStream::write_timeout unimplemented on redox" ) ) 
341356    } 
@@ -350,6 +365,7 @@ impl UnixStream {
350365     /// let socket = UnixStream::connect("/tmp/sock").unwrap(); 
351366     /// socket.set_nonblocking(true).expect("Couldn't set nonblocking"); 
352367     /// ``` 
368+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
353369    pub  fn  set_nonblocking ( & self ,  nonblocking :  bool )  -> io:: Result < ( ) >  { 
354370        self . 0 . set_nonblocking ( nonblocking) 
355371    } 
@@ -369,6 +385,7 @@ impl UnixStream {
369385     /// 
370386     /// # Platform specific 
371387     /// On Redox this always returns None. 
388+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
372389    pub  fn  take_error ( & self )  -> io:: Result < Option < io:: Error > >  { 
373390        Ok ( None ) 
374391    } 
@@ -390,11 +407,13 @@ impl UnixStream {
390407     /// let socket = UnixStream::connect("/tmp/sock").unwrap(); 
391408     /// socket.shutdown(Shutdown::Both).expect("shutdown function failed"); 
392409     /// ``` 
410+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
393411    pub  fn  shutdown ( & self ,  _how :  Shutdown )  -> io:: Result < ( ) >  { 
394412        Err ( Error :: new ( ErrorKind :: Other ,  "UnixStream::shutdown unimplemented on redox" ) ) 
395413    } 
396414} 
397415
416+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
398417impl  io:: Read  for  UnixStream  { 
399418    fn  read ( & mut  self ,  buf :  & mut  [ u8 ] )  -> io:: Result < usize >  { 
400419        io:: Read :: read ( & mut  & * self ,  buf) 
@@ -406,6 +425,7 @@ impl io::Read for UnixStream {
406425    } 
407426} 
408427
428+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
409429impl < ' a >  io:: Read  for  & ' a  UnixStream  { 
410430    fn  read ( & mut  self ,  buf :  & mut  [ u8 ] )  -> io:: Result < usize >  { 
411431        self . 0 . read ( buf) 
@@ -417,6 +437,7 @@ impl<'a> io::Read for &'a UnixStream {
417437    } 
418438} 
419439
440+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
420441impl  io:: Write  for  UnixStream  { 
421442    fn  write ( & mut  self ,  buf :  & [ u8 ] )  -> io:: Result < usize >  { 
422443        io:: Write :: write ( & mut  & * self ,  buf) 
@@ -427,6 +448,7 @@ impl io::Write for UnixStream {
427448    } 
428449} 
429450
451+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
430452impl < ' a >  io:: Write  for  & ' a  UnixStream  { 
431453    fn  write ( & mut  self ,  buf :  & [ u8 ] )  -> io:: Result < usize >  { 
432454        self . 0 . write ( buf) 
@@ -437,18 +459,21 @@ impl<'a> io::Write for &'a UnixStream {
437459    } 
438460} 
439461
462+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
440463impl  AsRawFd  for  UnixStream  { 
441464    fn  as_raw_fd ( & self )  -> RawFd  { 
442465        self . 0 . raw ( ) 
443466    } 
444467} 
445468
469+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
446470impl  FromRawFd  for  UnixStream  { 
447471    unsafe  fn  from_raw_fd ( fd :  RawFd )  -> UnixStream  { 
448472        UnixStream ( FileDesc :: new ( fd) ) 
449473    } 
450474} 
451475
476+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
452477impl  IntoRawFd  for  UnixStream  { 
453478    fn  into_raw_fd ( self )  -> RawFd  { 
454479        self . 0 . into_raw ( ) 
@@ -483,8 +508,10 @@ impl IntoRawFd for UnixStream {
483508///     } 
484509/// } 
485510/// ``` 
511+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
486512pub  struct  UnixListener ( FileDesc ) ; 
487513
514+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
488515impl  fmt:: Debug  for  UnixListener  { 
489516    fn  fmt ( & self ,  fmt :  & mut  fmt:: Formatter )  -> fmt:: Result  { 
490517        let  mut  builder = fmt. debug_struct ( "UnixListener" ) ; 
@@ -512,6 +539,7 @@ impl UnixListener {
512539     ///     } 
513540     /// }; 
514541     /// ``` 
542+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
515543    pub  fn  bind < P :  AsRef < Path > > ( path :  P )  -> io:: Result < UnixListener >  { 
516544        if  let  Some ( s)  = path. as_ref ( ) . to_str ( )  { 
517545            cvt ( syscall:: open ( format ! ( "chan:{}" ,  s) ,  syscall:: O_CREAT  | syscall:: O_CLOEXEC ) ) 
@@ -545,6 +573,7 @@ impl UnixListener {
545573     ///     Err(e) => println!("accept function failed: {:?}", e), 
546574     /// } 
547575     /// ``` 
576+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
548577    pub  fn  accept ( & self )  -> io:: Result < ( UnixStream ,  SocketAddr ) >  { 
549578        self . 0 . duplicate_path ( b"listen" ) . map ( |fd| ( UnixStream ( fd) ,  SocketAddr ( ( ) ) ) ) 
550579    } 
@@ -564,6 +593,7 @@ impl UnixListener {
564593     /// 
565594     /// let listener_copy = listener.try_clone().expect("try_clone failed"); 
566595     /// ``` 
596+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
567597    pub  fn  try_clone ( & self )  -> io:: Result < UnixListener >  { 
568598        self . 0 . duplicate ( ) . map ( UnixListener ) 
569599    } 
@@ -579,6 +609,7 @@ impl UnixListener {
579609     /// 
580610     /// let addr = listener.local_addr().expect("Couldn't get local address"); 
581611     /// ``` 
612+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
582613    pub  fn  local_addr ( & self )  -> io:: Result < SocketAddr >  { 
583614        Err ( Error :: new ( ErrorKind :: Other ,  "UnixListener::local_addr unimplemented on redox" ) ) 
584615    } 
@@ -594,6 +625,7 @@ impl UnixListener {
594625     /// 
595626     /// listener.set_nonblocking(true).expect("Couldn't set non blocking"); 
596627     /// ``` 
628+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
597629    pub  fn  set_nonblocking ( & self ,  nonblocking :  bool )  -> io:: Result < ( ) >  { 
598630        self . 0 . set_nonblocking ( nonblocking) 
599631    } 
@@ -614,6 +646,7 @@ impl UnixListener {
614646     /// 
615647     /// # Platform specific 
616648     /// On Redox this always returns None. 
649+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
617650    pub  fn  take_error ( & self )  -> io:: Result < Option < io:: Error > >  { 
618651        Ok ( None ) 
619652    } 
@@ -649,29 +682,34 @@ impl UnixListener {
649682     ///     } 
650683     /// } 
651684     /// ``` 
685+      #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
652686    pub  fn  incoming < ' a > ( & ' a  self )  -> Incoming < ' a >  { 
653687        Incoming  {  listener :  self  } 
654688    } 
655689} 
656690
691+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
657692impl  AsRawFd  for  UnixListener  { 
658693    fn  as_raw_fd ( & self )  -> RawFd  { 
659694        self . 0 . raw ( ) 
660695    } 
661696} 
662697
698+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
663699impl  FromRawFd  for  UnixListener  { 
664700    unsafe  fn  from_raw_fd ( fd :  RawFd )  -> UnixListener  { 
665701        UnixListener ( FileDesc :: new ( fd) ) 
666702    } 
667703} 
668704
705+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
669706impl  IntoRawFd  for  UnixListener  { 
670707    fn  into_raw_fd ( self )  -> RawFd  { 
671708        self . 0 . into_raw ( ) 
672709    } 
673710} 
674711
712+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
675713impl < ' a >  IntoIterator  for  & ' a  UnixListener  { 
676714    type  Item  = io:: Result < UnixStream > ; 
677715    type  IntoIter  = Incoming < ' a > ; 
@@ -712,10 +750,12 @@ impl<'a> IntoIterator for &'a UnixListener {
712750/// } 
713751/// ``` 
714752#[ derive( Debug ) ]  
753+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
715754pub  struct  Incoming < ' a >  { 
716755    listener :  & ' a  UnixListener , 
717756} 
718757
758+ #[ stable( feature = "unix_socket_redox" ,  since = "1.29" ) ]  
719759impl < ' a >  Iterator  for  Incoming < ' a >  { 
720760    type  Item  = io:: Result < UnixStream > ; 
721761
0 commit comments