@@ -691,16 +691,15 @@ impl UnixDatagram {
691
691
/// Creates a Unix Datagram socket which is connected to specified addresss
692
692
/// the socket is unnamed and similar to one created by `new()` except
693
693
/// it will send message to the specified addresss *by default*
694
- pub fn connect < P : AsRef < Path > > ( path : P ) -> io:: Result < UnixDatagram > {
694
+ pub fn connect < P : AsRef < Path > > ( & mut self , path : P )
695
+ -> io:: Result < ( ) >
696
+ {
695
697
unsafe {
696
- let inner = try!( Inner :: new ( libc:: SOCK_DGRAM ) ) ;
697
698
let ( addr, len) = try!( sockaddr_un ( path) ) ;
698
699
699
- try!( cvt ( libc:: connect ( inner. 0 , & addr as * const _ as * const _ , len) ) ) ;
700
+ try!( cvt ( libc:: connect ( self . inner . 0 , & addr as * const _ as * const _ , len) ) ) ;
700
701
701
- Ok ( UnixDatagram {
702
- inner : inner,
703
- } )
702
+ Ok ( ( ) )
704
703
}
705
704
}
706
705
@@ -1106,23 +1105,32 @@ mod test {
1106
1105
fn test_connect_unix_datagram ( ) {
1107
1106
let dir = or_panic ! ( TempDir :: new( "unix_socket" ) ) ;
1108
1107
let path1 = dir. path ( ) . join ( "sock1" ) ;
1108
+ let path2 = dir. path ( ) . join ( "sock2" ) ;
1109
1109
1110
- let sock1 = or_panic ! ( UnixDatagram :: bind( & path1) ) ;
1111
- let sock2 = or_panic ! ( UnixDatagram :: connect( & path1) ) ;
1110
+ let bsock1 = or_panic ! ( UnixDatagram :: bind( & path1) ) ;
1111
+ let bsock2 = or_panic ! ( UnixDatagram :: bind( & path2) ) ;
1112
+ let mut sock = or_panic ! ( UnixDatagram :: new( ) ) ;
1113
+ or_panic ! ( sock. connect( & path1) ) ;
1112
1114
1113
1115
// Check send()
1114
1116
let msg = b"hello there" ;
1115
- or_panic ! ( sock2 . send( msg) ) ;
1117
+ or_panic ! ( sock . send( msg) ) ;
1116
1118
let mut buf = [ 0 ; 11 ] ;
1117
- let ( usize, addr) = or_panic ! ( sock1 . recv_from( & mut buf) ) ;
1119
+ let ( usize, addr) = or_panic ! ( bsock1 . recv_from( & mut buf) ) ;
1118
1120
assert_eq ! ( usize , 11 ) ;
1119
1121
assert_eq ! ( addr. address( ) , AddressKind :: Unnamed ) ;
1120
1122
assert_eq ! ( msg, & buf[ ..] ) ;
1121
1123
1124
+
1122
1125
// Send to should still work too
1123
1126
let msg = b"hello world" ;
1124
- or_panic ! ( sock2 . send_to( msg, & path1 ) ) ;
1125
- or_panic ! ( sock1 . recv_from( & mut buf) ) ;
1127
+ or_panic ! ( sock . send_to( msg, & path2 ) ) ;
1128
+ or_panic ! ( bsock2 . recv_from( & mut buf) ) ;
1126
1129
assert_eq ! ( msg, & buf[ ..] ) ;
1130
+
1131
+ // Changing default socket works too
1132
+ or_panic ! ( sock. connect( & path2) ) ;
1133
+ or_panic ! ( sock. send( msg) ) ;
1134
+ or_panic ! ( bsock2. recv_from( & mut buf) ) ;
1127
1135
}
1128
1136
}
0 commit comments