Skip to content

Commit f7b0576

Browse files
authored
Merge pull request #1916 from sarahspberrypi/unix_sockets
feat(sockets): stub UNIX sockets
2 parents fb03875 + ee3bc22 commit f7b0576

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/syscalls/socket/addrinfo.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,11 @@ fn getaddrinfo_node(
415415
Af::Unspec => (true, true),
416416
Af::Inet => (true, false),
417417
Af::Inet6 => (false, true),
418+
Af::Unix => {
419+
error!("getaddrinfo_node({ai_family:?}) not implemented");
420+
crate::errno::ToErrno::set_errno(-i32::from(crate::errno::Errno::Nosys));
421+
return Err(Eai::System);
422+
}
418423
#[cfg(feature = "vsock")]
419424
Af::Vsock => {
420425
error!("getaddrinfo_node({ai_family:?}) not implemented");

src/syscalls/socket/mod.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ pub enum Af {
3636
Unspec = 0,
3737
Inet = 3,
3838
Inet6 = 1,
39+
Unix = 4,
3940
#[cfg(feature = "vsock")]
4041
Vsock = 2,
4142
}
@@ -153,6 +154,7 @@ pub enum sockaddrBox {
153154
sockaddr(Box<sockaddr>),
154155
sockaddr_in(Box<sockaddr_in>),
155156
sockaddr_in6(Box<sockaddr_in6>),
157+
sockaddr_un(Box<sockaddr_un>),
156158
#[cfg(feature = "vsock")]
157159
sockaddr_vm(Box<sockaddr_vm>),
158160
}
@@ -162,6 +164,7 @@ pub enum sockaddrRef<'a> {
162164
sockaddr(&'a sockaddr),
163165
sockaddr_in(&'a sockaddr_in),
164166
sockaddr_in6(&'a sockaddr_in6),
167+
sockaddr_un(&'a sockaddr_un),
165168
#[cfg(feature = "vsock")]
166169
sockaddr_vm(&'a sockaddr_vm),
167170
}
@@ -179,6 +182,7 @@ impl sockaddr {
179182
Af::Unspec => sockaddrRef::sockaddr(unsafe { &*ptr }),
180183
Af::Inet => sockaddrRef::sockaddr_in(unsafe { &*ptr.cast() }),
181184
Af::Inet6 => sockaddrRef::sockaddr_in6(unsafe { &*ptr.cast() }),
185+
Af::Unix => sockaddrRef::sockaddr_un(unsafe { &*ptr.cast() }),
182186
#[cfg(feature = "vsock")]
183187
Af::Vsock => sockaddrRef::sockaddr_vm(unsafe { &*ptr.cast() }),
184188
};
@@ -191,6 +195,7 @@ impl sockaddr {
191195
Af::Unspec => sockaddrBox::sockaddr(unsafe { Box::from_raw(ptr) }),
192196
Af::Inet => sockaddrBox::sockaddr_in(unsafe { Box::from_raw(ptr.cast()) }),
193197
Af::Inet6 => sockaddrBox::sockaddr_in6(unsafe { Box::from_raw(ptr.cast()) }),
198+
Af::Unix => sockaddrBox::sockaddr_un(unsafe { Box::from_raw(ptr.cast()) }),
194199
#[cfg(feature = "vsock")]
195200
Af::Vsock => sockaddrBox::sockaddr_vm(unsafe { Box::from_raw(ptr.cast()) }),
196201
};
@@ -204,6 +209,7 @@ impl sockaddrBox {
204209
sockaddrBox::sockaddr(sockaddr) => Box::into_raw(sockaddr),
205210
sockaddrBox::sockaddr_in(sockaddr_in) => Box::into_raw(sockaddr_in).cast(),
206211
sockaddrBox::sockaddr_in6(sockaddr_in6) => Box::into_raw(sockaddr_in6).cast(),
212+
sockaddrBox::sockaddr_un(sockaddr_un) => Box::into_raw(sockaddr_un).cast(),
207213
#[cfg(feature = "vsock")]
208214
sockaddrBox::sockaddr_vm(sockaddr_vm) => Box::into_raw(sockaddr_vm).cast(),
209215
}
@@ -214,6 +220,7 @@ impl sockaddrBox {
214220
Self::sockaddr(sockaddr) => sockaddrRef::sockaddr(sockaddr.as_ref()),
215221
Self::sockaddr_in(sockaddr_in) => sockaddrRef::sockaddr_in(sockaddr_in.as_ref()),
216222
Self::sockaddr_in6(sockaddr_in6) => sockaddrRef::sockaddr_in6(sockaddr_in6.as_ref()),
223+
Self::sockaddr_un(sockaddr_un) => sockaddrRef::sockaddr_un(sockaddr_un.as_ref()),
217224
#[cfg(feature = "vsock")]
218225
Self::sockaddr_vm(sockaddr_vm) => sockaddrRef::sockaddr_vm(sockaddr_vm.as_ref()),
219226
}
@@ -235,6 +242,7 @@ impl sockaddrRef<'_> {
235242
sockaddrRef::sockaddr(sockaddr) => sockaddr.sa_len,
236243
sockaddrRef::sockaddr_in(sockaddr_in) => sockaddr_in.sin_len,
237244
sockaddrRef::sockaddr_in6(sockaddr_in6) => sockaddr_in6.sin6_len,
245+
sockaddrRef::sockaddr_un(sockaddr_un) => sockaddr_un.sun_len,
238246
#[cfg(feature = "vsock")]
239247
sockaddrRef::sockaddr_vm(sockaddr_vm) => sockaddr_vm.svm_len,
240248
}
@@ -448,6 +456,14 @@ impl From<SocketAddrV6> for sockaddr_in6 {
448456
}
449457
}
450458

459+
#[repr(C)]
460+
#[derive(Debug, Copy, Clone)]
461+
pub struct sockaddr_un {
462+
pub sun_len: u8,
463+
pub sun_family: sa_family_t,
464+
pub sun_path: [c_char; 104],
465+
}
466+
451467
#[repr(C)]
452468
#[derive(Debug, Copy, Clone)]
453469
pub struct ip_mreq {

0 commit comments

Comments
 (0)