@@ -44,18 +44,15 @@ pub use self::inner::*;
4444
4545#[ cfg( any( target_os = "linux" , target_os = "android" ) ) ]
4646mod inner {
47- use std:: os:: unix:: prelude :: RawFd ;
47+ use std:: os:: unix:: io :: { AsRawFd , OwnedFd } ;
4848
49- use nix:: {
50- sys:: socket:: { self , UnixAddr } ,
51- unistd,
52- } ;
49+ use nix:: sys:: socket:: { self , UnixAddr } ;
5350
5451 use super :: Error ;
5552
5653 /// A struct representing one running instance.
5754 pub struct SingleInstance {
58- maybe_sock : Option < RawFd > ,
55+ maybe_sock : Option < OwnedFd > ,
5956 }
6057
6158 impl SingleInstance {
@@ -71,7 +68,7 @@ mod inner {
7168 None ,
7269 ) ?;
7370
74- let maybe_sock = match socket:: bind ( sock, & socket :: SockAddr :: Unix ( addr) ) {
71+ let maybe_sock = match socket:: bind ( sock. as_raw_fd ( ) , & addr) {
7572 Ok ( ( ) ) => Some ( sock) ,
7673 Err ( nix:: errno:: Errno :: EADDRINUSE ) => None ,
7774 Err ( e) => return Err ( e. into ( ) ) ,
@@ -90,9 +87,9 @@ mod inner {
9087
9188 impl Drop for SingleInstance {
9289 fn drop ( & mut self ) {
93- if let Some ( sock ) = self . maybe_sock {
94- // Intentionally discard any close errors.
95- let _ = unistd :: close ( sock) ;
90+ // OwnedFd closes the file descriptor automatically on drop.
91+ if let Some ( sock ) = self . maybe_sock . take ( ) {
92+ drop ( sock) ;
9693 }
9794 }
9895 }
0 commit comments