mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-27 00:00:12 +02:00
Merge 'tokio-1.39.x' into master (#6788)
This commit is contained in:
@@ -56,7 +56,7 @@ Make sure you activated the full features of the tokio crate on Cargo.toml:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
tokio = { version = "1.39.2", features = ["full"] }
|
||||
tokio = { version = "1.39.3", features = ["full"] }
|
||||
```
|
||||
Then, on your main.rs:
|
||||
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
# 1.39.3 (August 17th, 2024)
|
||||
|
||||
This release fixes a regression where the unix socket api stopped accepting
|
||||
the abstract socket namespace. ([#6772])
|
||||
|
||||
[#6772]: https://github.com/tokio-rs/tokio/pull/6772
|
||||
|
||||
# 1.39.2 (July 27th, 2024)
|
||||
|
||||
This release fixes a regression where the `select!` macro stopped accepting
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ name = "tokio"
|
||||
# - README.md
|
||||
# - Update CHANGELOG.md.
|
||||
# - Create "v1.x.y" git tag.
|
||||
version = "1.39.2"
|
||||
version = "1.39.3"
|
||||
edition = "2021"
|
||||
rust-version = "1.70"
|
||||
authors = ["Tokio Contributors <[email protected]>"]
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@ Make sure you activated the full features of the tokio crate on Cargo.toml:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
tokio = { version = "1.39.2", features = ["full"] }
|
||||
tokio = { version = "1.39.3", features = ["full"] }
|
||||
```
|
||||
Then, on your main.rs:
|
||||
|
||||
|
||||
@@ -3,8 +3,14 @@ use crate::net::unix::{SocketAddr, UnixStream};
|
||||
|
||||
use std::fmt;
|
||||
use std::io;
|
||||
#[cfg(target_os = "android")]
|
||||
use std::os::android::net::SocketAddrExt;
|
||||
#[cfg(target_os = "linux")]
|
||||
use std::os::linux::net::SocketAddrExt;
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
use std::os::unix::ffi::OsStrExt;
|
||||
use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, RawFd};
|
||||
use std::os::unix::net;
|
||||
use std::os::unix::net::{self, SocketAddr as StdSocketAddr};
|
||||
use std::path::Path;
|
||||
use std::task::{Context, Poll};
|
||||
|
||||
@@ -70,7 +76,20 @@ impl UnixListener {
|
||||
where
|
||||
P: AsRef<Path>,
|
||||
{
|
||||
let listener = mio::net::UnixListener::bind(path)?;
|
||||
// For now, we handle abstract socket paths on linux here.
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
let addr = {
|
||||
let os_str_bytes = path.as_ref().as_os_str().as_bytes();
|
||||
if os_str_bytes.starts_with(b"\0") {
|
||||
StdSocketAddr::from_abstract_name(os_str_bytes)?
|
||||
} else {
|
||||
StdSocketAddr::from_pathname(path)?
|
||||
}
|
||||
};
|
||||
#[cfg(not(any(target_os = "linux", target_os = "android")))]
|
||||
let addr = StdSocketAddr::from_pathname(path)?;
|
||||
|
||||
let listener = mio::net::UnixListener::bind_addr(&addr)?;
|
||||
let io = PollEvented::new(listener)?;
|
||||
Ok(UnixListener { io })
|
||||
}
|
||||
|
||||
@@ -8,8 +8,14 @@ use crate::net::unix::SocketAddr;
|
||||
use std::fmt;
|
||||
use std::io::{self, Read, Write};
|
||||
use std::net::Shutdown;
|
||||
#[cfg(target_os = "android")]
|
||||
use std::os::android::net::SocketAddrExt;
|
||||
#[cfg(target_os = "linux")]
|
||||
use std::os::linux::net::SocketAddrExt;
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
use std::os::unix::ffi::OsStrExt;
|
||||
use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, RawFd};
|
||||
use std::os::unix::net;
|
||||
use std::os::unix::net::{self, SocketAddr as StdSocketAddr};
|
||||
use std::path::Path;
|
||||
use std::pin::Pin;
|
||||
use std::task::{Context, Poll};
|
||||
@@ -66,7 +72,20 @@ impl UnixStream {
|
||||
where
|
||||
P: AsRef<Path>,
|
||||
{
|
||||
let stream = mio::net::UnixStream::connect(path)?;
|
||||
// On linux, abstract socket paths need to be considered.
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
let addr = {
|
||||
let os_str_bytes = path.as_ref().as_os_str().as_bytes();
|
||||
if os_str_bytes.starts_with(b"\0") {
|
||||
StdSocketAddr::from_abstract_name(os_str_bytes)?
|
||||
} else {
|
||||
StdSocketAddr::from_pathname(path)?
|
||||
}
|
||||
};
|
||||
#[cfg(not(any(target_os = "linux", target_os = "android")))]
|
||||
let addr = StdSocketAddr::from_pathname(path)?;
|
||||
|
||||
let stream = mio::net::UnixStream::connect_addr(&addr)?;
|
||||
let stream = UnixStream::new(stream)?;
|
||||
|
||||
poll_fn(|cx| stream.io.registration().poll_write_ready(cx)).await?;
|
||||
|
||||
@@ -420,3 +420,16 @@ async fn epollhup() -> io::Result<()> {
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// test for https://github.com/tokio-rs/tokio/issues/6767
|
||||
#[tokio::test]
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
async fn abstract_socket_name() {
|
||||
let socket_path = "\0aaa";
|
||||
let listener = UnixListener::bind(socket_path).unwrap();
|
||||
|
||||
let accept = listener.accept();
|
||||
let connect = UnixStream::connect(&socket_path);
|
||||
|
||||
try_join(accept, connect).await.unwrap();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user