@@ -73,6 +73,16 @@ impl Server {
73
73
Ok ( self )
74
74
}
75
75
76
+ pub fn set_domain_unix ( mut self ) -> Self {
77
+ self . domain = Some ( Domain :: Unix ) ;
78
+ self
79
+ }
80
+
81
+ pub fn set_domain_vsock ( mut self ) -> Self {
82
+ self . domain = Some ( Domain :: Vsock ) ;
83
+ self
84
+ }
85
+
76
86
pub fn add_listener ( mut self , fd : RawFd ) -> Result < Server > {
77
87
self . listeners . push ( fd) ;
78
88
@@ -100,8 +110,8 @@ impl Server {
100
110
pub async fn start ( & mut self ) -> Result < ( ) > {
101
111
let listenfd = self . get_listenfd ( ) ?;
102
112
103
- match self . domain . as_ref ( ) . unwrap ( ) {
104
- Domain :: Unix => {
113
+ match self . domain . as_ref ( ) {
114
+ Some ( Domain :: Unix ) => {
105
115
let sys_unix_listener;
106
116
unsafe {
107
117
sys_unix_listener = SysUnixListener :: from_raw_fd ( listenfd) ;
@@ -110,14 +120,15 @@ impl Server {
110
120
111
121
self . do_start ( listenfd, unix_listener) . await
112
122
}
113
- Domain :: Vsock => {
123
+ Some ( Domain :: Vsock ) => {
114
124
let incoming;
115
125
unsafe {
116
126
incoming = VsockListener :: from_raw_fd ( listenfd) . incoming ( ) ;
117
127
}
118
128
119
129
self . do_start ( listenfd, incoming) . await
120
130
}
131
+ _ => Err ( Error :: Others ( "Domain is not set" . to_string ( ) ) ) ,
121
132
}
122
133
}
123
134
@@ -312,3 +323,15 @@ async fn handle_request(
312
323
}
313
324
}
314
325
}
326
+
327
+ impl FromRawFd for Server {
328
+ unsafe fn from_raw_fd ( fd : RawFd ) -> Self {
329
+ Self :: default ( ) . add_listener ( fd) . unwrap ( )
330
+ }
331
+ }
332
+
333
+ impl AsRawFd for Server {
334
+ fn as_raw_fd ( & self ) -> RawFd {
335
+ self . listeners [ 0 ]
336
+ }
337
+ }
0 commit comments