@@ -19,6 +19,10 @@ use std::net::{ToSocketAddrs, SocketAddr, Shutdown};
1919
2020#[ cfg( target_os="linux" ) ]
2121use std:: os:: unix:: io:: { AsRawFd , RawFd , FromRawFd } ;
22+
23+ #[ cfg( target_os="linux" ) ]
24+ pub mod mio_unix;
25+
2226#[ cfg( target_os="windows" ) ]
2327use std:: os:: windows:: io:: { AsRawHandle , RawHandle , FromRawHandle } ;
2428
@@ -60,9 +64,9 @@ impl SctpStream {
6064
6165 /// Create a new stream by connecting it to a remote endpoint
6266 pub fn connect < A : ToSocketAddrs > ( address : A ) -> Result < SctpStream > {
63- let raw_addr = try! ( SocketAddr :: from_addr ( & address) ) ;
64- let sock = try! ( SctpSocket :: new ( raw_addr. family ( ) , SOCK_STREAM ) ) ;
65- try! ( sock. connect ( raw_addr) ) ;
67+ let raw_addr = SocketAddr :: from_addr ( & address) ? ;
68+ let sock = SctpSocket :: new ( raw_addr. family ( ) , SOCK_STREAM ) ? ;
69+ sock. connect ( raw_addr) ? ;
6670 return Ok ( SctpStream ( sock) ) ;
6771 }
6872
@@ -72,26 +76,32 @@ impl SctpStream {
7276 let mut vec = Vec :: with_capacity ( addresses. len ( ) ) ;
7377 let mut family = AF_INET ;
7478 for address in addresses {
75- let a = try! ( SocketAddr :: from_addr ( address) ) ;
79+ let a = SocketAddr :: from_addr ( address) ? ;
7680 if a. family ( ) == AF_INET6 { family = AF_INET6 ; }
7781 vec. push ( a) ;
7882 }
7983
80- let sock = try! ( SctpSocket :: new ( family, SOCK_STREAM ) ) ;
81- try! ( sock. connectx ( & vec) ) ;
84+ let sock = SctpSocket :: new ( family, SOCK_STREAM ) ? ;
85+ sock. connectx ( & vec) ? ;
8286 return Ok ( SctpStream ( sock) ) ;
8387 }
8488
8589 /// Send bytes on the specified SCTP stream. On success, returns the
8690 /// quantity of bytes read
8791 pub fn sendmsg ( & self , msg : & [ u8 ] , stream : u16 ) -> Result < usize > {
88- return self . 0 . sendmsg :: < SocketAddr > ( msg, None , stream, 0 ) ;
92+ return self . 0 . sendmsg :: < SocketAddr > ( msg, None , 0 , stream, 0 ) ;
93+ }
94+
95+ /// Send bytes on the specified SCTP stream. On success, returns the
96+ /// quantity of bytes read
97+ pub fn sendmsg_ppid ( & self , msg : & [ u8 ] , ppid : u32 , stream : u16 ) -> Result < usize > {
98+ return self . 0 . sendmsg :: < SocketAddr > ( msg, None , ppid, stream, 0 ) ;
8999 }
90100
91101 /// Read bytes. On success, return a tuple with the quantity of
92102 /// bytes received and the stream they were recived on
93103 pub fn recvmsg ( & self , msg : & mut [ u8 ] ) -> Result < ( usize , u16 ) > {
94- let ( size, stream, _) = try! ( self . 0 . recvmsg ( msg) ) ;
104+ let ( size, stream, _) = self . 0 . recvmsg ( msg) ? ;
95105 return Ok ( ( size, stream) ) ;
96106 }
97107
@@ -118,7 +128,7 @@ impl SctpStream {
118128
119129 /// Verify if SCTP_NODELAY option is activated for this socket
120130 pub fn has_nodelay ( & self ) -> Result < bool > {
121- let val: libc:: c_int = try! ( self . 0 . sctp_opt_info ( sctp_sys:: SCTP_NODELAY , 0 ) ) ;
131+ let val: libc:: c_int = self . 0 . sctp_opt_info ( sctp_sys:: SCTP_NODELAY , 0 ) ? ;
122132 return Ok ( val == 1 ) ;
123133 }
124134
@@ -129,8 +139,8 @@ impl SctpStream {
129139 }
130140
131141 /// Get the socket buffer size for the direction specified by `dir`
132- pub fn get_buffer_size ( & self , dir : SoDirection ) -> Result < ( usize ) > {
133- let val: u32 = try! ( self . 0 . getsockopt ( SOL_SOCKET , dir. buffer_opt ( ) ) ) ;
142+ pub fn get_buffer_size ( & self , dir : SoDirection ) -> Result < usize > {
143+ let val: u32 = self . 0 . getsockopt ( SOL_SOCKET , dir. buffer_opt ( ) ) ? ;
134144 return Ok ( val as usize ) ;
135145 }
136146
@@ -144,7 +154,7 @@ impl SctpStream {
144154 /// Try to clone the SctpStream. On success, returns a new stream
145155 /// wrapping a new socket handler
146156 pub fn try_clone ( & self ) -> Result < SctpStream > {
147- return Ok ( SctpStream ( try! ( self . 0 . try_clone ( ) ) ) ) ;
157+ return Ok ( SctpStream ( self . 0 . try_clone ( ) ? ) ) ;
148158 }
149159}
150160
@@ -200,10 +210,10 @@ impl SctpEndpoint {
200210
201211 /// Create a one-to-many SCTP endpoint bound to a single address
202212 pub fn bind < A : ToSocketAddrs > ( address : A ) -> Result < SctpEndpoint > {
203- let raw_addr = try! ( SocketAddr :: from_addr ( & address) ) ;
204- let sock = try! ( SctpSocket :: new ( raw_addr. family ( ) , SOCK_SEQPACKET ) ) ;
205- try! ( sock. bind ( raw_addr) ) ;
206- try! ( sock. listen ( -1 ) ) ;
213+ let raw_addr = SocketAddr :: from_addr ( & address) ? ;
214+ let sock = SctpSocket :: new ( raw_addr. family ( ) , SOCK_SEQPACKET ) ? ;
215+ sock. bind ( raw_addr) ? ;
216+ sock. listen ( -1 ) ? ;
207217 return Ok ( SctpEndpoint ( sock) ) ;
208218 }
209219
@@ -213,14 +223,14 @@ impl SctpEndpoint {
213223 let mut vec = Vec :: with_capacity ( addresses. len ( ) ) ;
214224 let mut family = AF_INET ;
215225 for address in addresses {
216- let a = try! ( SocketAddr :: from_addr ( address) ) ;
226+ let a = SocketAddr :: from_addr ( address) ? ;
217227 if a. family ( ) == AF_INET6 { family = AF_INET6 ; }
218228 vec. push ( a) ;
219229 }
220230
221- let sock = try! ( SctpSocket :: new ( family, SOCK_SEQPACKET ) ) ;
222- try! ( sock. bindx ( & vec, BindOp :: AddAddr ) ) ;
223- try! ( sock. listen ( -1 ) ) ;
231+ let sock = SctpSocket :: new ( family, SOCK_SEQPACKET ) ? ;
232+ sock. bindx ( & vec, BindOp :: AddAddr ) ? ;
233+ sock. listen ( -1 ) ? ;
224234 return Ok ( SctpEndpoint ( sock) ) ;
225235 }
226236
@@ -234,7 +244,7 @@ impl SctpEndpoint {
234244 /// Send data in Sctp style, to the provided address on the stream `stream`.
235245 /// On success, returns the quantity on bytes sent
236246 pub fn send_to < A : ToSocketAddrs > ( & self , msg : & mut [ u8 ] , address : A , stream : u16 ) -> Result < usize > {
237- return self . 0 . sendmsg ( msg, Some ( address) , stream, 0 ) ;
247+ return self . 0 . sendmsg ( msg, Some ( address) , 0 , stream, 0 ) ;
238248 }
239249
240250 /// Get local socket addresses to which this socket is bound
@@ -255,7 +265,7 @@ impl SctpEndpoint {
255265
256266 /// Verify if SCTP_NODELAY option is activated for this socket
257267 pub fn has_nodelay ( & self ) -> Result < bool > {
258- let val: libc:: c_int = try! ( self . 0 . sctp_opt_info ( sctp_sys:: SCTP_NODELAY , 0 ) ) ;
268+ let val: libc:: c_int = self . 0 . sctp_opt_info ( sctp_sys:: SCTP_NODELAY , 0 ) ? ;
259269 return Ok ( val == 1 ) ;
260270 }
261271
@@ -266,8 +276,8 @@ impl SctpEndpoint {
266276 }
267277
268278 /// Get the socket buffer size for the direction specified by `dir`
269- pub fn get_buffer_size ( & self , dir : SoDirection ) -> Result < ( usize ) > {
270- let val: u32 = try! ( self . 0 . getsockopt ( SOL_SOCKET , dir. buffer_opt ( ) ) ) ;
279+ pub fn get_buffer_size ( & self , dir : SoDirection ) -> Result < usize > {
280+ let val: u32 = self . 0 . getsockopt ( SOL_SOCKET , dir. buffer_opt ( ) ) ? ;
271281 return Ok ( val as usize ) ;
272282 }
273283
@@ -280,7 +290,7 @@ impl SctpEndpoint {
280290
281291 /// Try to clone this socket
282292 pub fn try_clone ( & self ) -> Result < SctpEndpoint > {
283- return Ok ( SctpEndpoint ( try! ( self . 0 . try_clone ( ) ) ) ) ;
293+ return Ok ( SctpEndpoint ( self . 0 . try_clone ( ) ? ) ) ;
284294 }
285295}
286296
@@ -336,10 +346,10 @@ impl SctpListener {
336346
337347 /// Create a listener bound to a single address
338348 pub fn bind < A : ToSocketAddrs > ( address : A ) -> Result < SctpListener > {
339- let raw_addr = try! ( SocketAddr :: from_addr ( & address) ) ;
340- let sock = try! ( SctpSocket :: new ( raw_addr. family ( ) , SOCK_STREAM ) ) ;
341- try! ( sock. bind ( raw_addr) ) ;
342- try! ( sock. listen ( -1 ) ) ;
349+ let raw_addr = SocketAddr :: from_addr ( & address) ? ;
350+ let sock = SctpSocket :: new ( raw_addr. family ( ) , SOCK_STREAM ) ? ;
351+ sock. bind ( raw_addr) ? ;
352+ sock. listen ( -1 ) ? ;
343353 return Ok ( SctpListener ( sock) ) ;
344354 }
345355
@@ -349,20 +359,20 @@ impl SctpListener {
349359 let mut vec = Vec :: with_capacity ( addresses. len ( ) ) ;
350360 let mut family = AF_INET ;
351361 for address in addresses {
352- let a = try! ( SocketAddr :: from_addr ( address) ) ;
362+ let a = SocketAddr :: from_addr ( address) ? ;
353363 if a. family ( ) == AF_INET6 { family = AF_INET6 ; }
354364 vec. push ( a) ;
355365 }
356366
357- let sock = try! ( SctpSocket :: new ( family, SOCK_STREAM ) ) ;
358- try! ( sock. bindx ( & vec, BindOp :: AddAddr ) ) ;
359- try! ( sock. listen ( -1 ) ) ;
367+ let sock = SctpSocket :: new ( family, SOCK_STREAM ) ? ;
368+ sock. bindx ( & vec, BindOp :: AddAddr ) ? ;
369+ sock. listen ( -1 ) ? ;
360370 return Ok ( SctpListener ( sock) ) ;
361371 }
362372
363373 /// Accept a new connection
364374 pub fn accept ( & self ) -> Result < ( SctpStream , SocketAddr ) > {
365- let ( sock, addr) = try! ( self . 0 . accept ( ) ) ;
375+ let ( sock, addr) = self . 0 . accept ( ) ? ;
366376 return Ok ( ( SctpStream ( sock) , addr) ) ;
367377 }
368378
@@ -385,7 +395,7 @@ impl SctpListener {
385395
386396 /// Try to clone this listener
387397 pub fn try_clone ( & self ) -> Result < SctpListener > {
388- return Ok ( SctpListener ( try! ( self . 0 . try_clone ( ) ) ) ) ;
398+ return Ok ( SctpListener ( self . 0 . try_clone ( ) ? ) ) ;
389399 }
390400}
391401
0 commit comments