posix-socket 0.2.0

thin wrapper around POSIX sockets
Documentation
use std::ffi::OsString;
use std::os::raw::c_char;
use std::os::unix::ffi::OsStringExt;
use std::path::{Path, PathBuf};

pub struct TempDir {
	path: PathBuf,
}

impl TempDir {
	pub fn new() -> std::io::Result<Self> {
		let mut template = std::env::temp_dir()
			.join("posix-socket-rs-XXXXXX")
			.into_os_string()
			.into_vec();
		template.push(0);
		unsafe {
			if libc::mkdtemp(template.as_mut_ptr() as *mut c_char).is_null() {
				return Err(std::io::Error::last_os_error());
			}
		}

		template.pop();
		let path = PathBuf::from(OsString::from_vec(template));
		Ok(Self { path })
	}

	pub fn path(&self) -> &Path {
		&self.path
	}
}

impl Drop for TempDir {
	fn drop(&mut self) {
		let _ = std::fs::remove_dir_all(self.path());
	}
}