os_socketaddr

Crates.io Build Status

This crate provides a type that can act as a platform-native socket address (i.e. libc::sockaddr)

Motivation

The std crate provides SocketAddr for managing socket addresses. However there is no easy way to convert SocketAddr from/into a libc::sockaddr because SocketAddr has a different internal layout.

This crate provides OsSocketAddr which holds a libc::sockaddr (containing an IPv4 or IPv6 address) and the conversion functions from/into SocketAddr.

Example

```rust extern crate libc; extern crate os_socketaddr;

use std::net::SocketAddr; use libc::{cint, cvoid, sizet, ssizet}; use os_socketaddr::OsSocketAddr;

fn sendto(socket: cint, buf: &[u8], dst: SocketAddr) -> ssizet { let addr : OsSocketAddr = dst.into(); unsafe { libc::sendto(socket, buf.asptr() as *const cvoid, buf.len() as sizet, 0, addr.asptr(), addr.len()) } }

fn recvfrom(socket: cint, buf: &mut[u8]) -> (ssizet, Option) { let mut addr = OsSocketAddr::new(); let mut addrlen = addr.capacity(); let nb = unsafe { libc::recvfrom(socket, buf.asmutptr() as *mut cvoid, buf.len(), 0, addr.asmut_ptr(), &mut addrlen as *mut _) }; (nb, addr.into()) } ```