Skip to content

Commit 1574408

Browse files
committed
cmsg: fix problems
1 parent 6e27e16 commit 1574408

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

src/sys/socket/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ struct cmsghdr {
120120
pub cmsg_len: type_of_cmsg_len,
121121
pub cmsg_level: c_int,
122122
pub cmsg_type: c_int,
123-
cmsg_data: [size_t; 0]
123+
cmsg_data: [type_of_cmsg_len; 0]
124124
}
125125

126126
/// A structure used to make room in a cmsghdr passed to recvmsg. The
@@ -284,8 +284,10 @@ impl<'a> ControlMessage<'a> {
284284
///
285285
/// Allocates if cmsgs is nonempty.
286286
pub fn sendmsg<'a>(fd: RawFd, iov: &[IoVec<&'a [u8]>], cmsgs: &[ControlMessage<'a>], flags: SockMessageFlags, addr: Option<&'a SockAddr>) -> Result<usize> {
287+
let mut len = 0;
287288
let mut capacity = 0;
288289
for cmsg in cmsgs {
290+
len += cmsg.len();
289291
capacity += cmsg.space();
290292
}
291293
// Alignment hackery. Note that capacity is guaranteed to be a
@@ -315,7 +317,7 @@ pub fn sendmsg<'a>(fd: RawFd, iov: &[IoVec<&'a [u8]>], cmsgs: &[ControlMessage<'
315317
msg_iov: iov.as_ptr(),
316318
msg_iovlen: iov.len() as size_t,
317319
msg_control: cmsg_buffer.as_ptr() as *const c_void,
318-
msg_controllen: cmsg_buffer.len() as size_t,
320+
msg_controllen: len as size_t,
319321
msg_flags: 0,
320322
};
321323
let ret = unsafe { ffi::sendmsg(fd, &mhdr, flags) };

0 commit comments

Comments
 (0)