@@ -10,7 +10,7 @@ use compio_driver::{
10
10
RecvResultExt , RecvVectored , Send , SendMsg , SendTo , SendToVectored , SendVectored ,
11
11
ShutdownSocket ,
12
12
} ,
13
- ToSharedFd ,
13
+ syscall , AsRawFd , ToSharedFd ,
14
14
} ;
15
15
use compio_runtime:: Attacher ;
16
16
use socket2:: { Domain , Protocol , SockAddr , Socket as Socket2 , Type } ;
@@ -324,6 +324,33 @@ impl Socket {
324
324
let op = SendMsg :: new ( fd, buffer, control, addr. clone ( ) ) ;
325
325
compio_runtime:: submit ( op) . await . into_inner ( )
326
326
}
327
+
328
+ #[ cfg( unix) ]
329
+ pub fn set_socket_option < T > ( & self , level : i32 , name : i32 , value : & T ) -> io:: Result < ( ) > {
330
+ syscall ! ( libc:: setsockopt(
331
+ self . socket. as_raw_fd( ) ,
332
+ level,
333
+ name,
334
+ value as * const _ as _,
335
+ std:: mem:: size_of:: <T >( ) as _
336
+ ) )
337
+ . map ( |_| ( ) )
338
+ }
339
+
340
+ #[ cfg( windows) ]
341
+ pub fn set_socket_option < T > ( & self , level : i32 , name : i32 , value : & T ) -> io:: Result < ( ) > {
342
+ syscall ! (
343
+ SOCKET ,
344
+ windows_sys:: Win32 :: Networking :: WinSock :: setsockopt(
345
+ self . socket. as_raw_fd( ) as _,
346
+ level,
347
+ name,
348
+ value as * const _ as _,
349
+ std:: mem:: size_of:: <T >( ) as _
350
+ )
351
+ )
352
+ . map ( |_| ( ) )
353
+ }
327
354
}
328
355
329
356
impl_raw_fd ! ( Socket , Socket2 , socket, socket) ;
0 commit comments