use MSG_NOSIGNAL from liblibc

This commit is contained in:
Mathieu Poumeyrol 2016-09-28 14:06:34 +02:00
parent ed5e542819
commit 5980d5bfdd
3 changed files with 7 additions and 11 deletions

@ -1 +1 @@
Subproject commit eb708c020826a8d792a5a5275be147aabe47fe24
Subproject commit b474785561d58efbd27add9d22339dcabad742ad

View file

@ -43,7 +43,7 @@ use sys::net::netc::IPV6_LEAVE_GROUP as IPV6_DROP_MEMBERSHIP;
use sys::net::netc::IPV6_DROP_MEMBERSHIP;
#[cfg(target_os = "linux")]
const MSG_NOSIGNAL: c_int = 0x4000;
use libc::MSG_NOSIGNAL;
#[cfg(not(target_os = "linux"))]
const MSG_NOSIGNAL: c_int = 0x0; // unused dummy value
@ -226,12 +226,11 @@ impl TcpStream {
pub fn write(&self, buf: &[u8]) -> io::Result<usize> {
let len = cmp::min(buf.len(), <wrlen_t>::max_value() as usize) as wrlen_t;
let flags = if cfg!(target_os = "linux") { MSG_NOSIGNAL } else { 0 };
let ret = cvt(unsafe {
c::send(*self.inner.as_inner(),
buf.as_ptr() as *const c_void,
len,
flags)
MSG_NOSIGNAL)
})?;
Ok(ret as usize)
}
@ -452,11 +451,10 @@ impl UdpSocket {
pub fn send_to(&self, buf: &[u8], dst: &SocketAddr) -> io::Result<usize> {
let len = cmp::min(buf.len(), <wrlen_t>::max_value() as usize) as wrlen_t;
let (dstp, dstlen) = dst.into_inner();
let flags = if cfg!(target_os = "linux") { MSG_NOSIGNAL } else { 0 };
let ret = cvt(unsafe {
c::sendto(*self.inner.as_inner(),
buf.as_ptr() as *const c_void, len,
flags, dstp, dstlen)
MSG_NOSIGNAL, dstp, dstlen)
})?;
Ok(ret as usize)
}
@ -576,12 +574,11 @@ impl UdpSocket {
pub fn send(&self, buf: &[u8]) -> io::Result<usize> {
let len = cmp::min(buf.len(), <wrlen_t>::max_value() as usize) as wrlen_t;
let flags = if cfg!(target_os = "linux") { MSG_NOSIGNAL } else { 0 };
let ret = cvt(unsafe {
c::send(*self.inner.as_inner(),
buf.as_ptr() as *const c_void,
len,
flags)
MSG_NOSIGNAL)
})?;
Ok(ret as usize)
}

View file

@ -29,7 +29,7 @@ use sys::net::Socket;
use sys_common::{AsInner, FromInner, IntoInner};
#[cfg(target_os = "linux")]
const MSG_NOSIGNAL: libc::c_int = 0x4000;
use libc::MSG_NOSIGNAL;
#[cfg(not(target_os = "linux"))]
const MSG_NOSIGNAL: libc::c_int = 0x0; // unused dummy value
@ -691,12 +691,11 @@ impl UnixDatagram {
fn inner(d: &UnixDatagram, buf: &[u8], path: &Path) -> io::Result<usize> {
unsafe {
let (addr, len) = sockaddr_un(path)?;
let flags = if cfg!(target_os = "linux") { MSG_NOSIGNAL } else { 0 };
let count = cvt(libc::sendto(*d.0.as_inner(),
buf.as_ptr() as *const _,
buf.len(),
flags,
MSG_NOSIGNAL,
&addr as *const _ as *const _,
len))?;
Ok(count as usize)