[mio] 修复ip代理相关问题
This commit is contained in:
@@ -85,14 +85,13 @@ fn icmp_proxy(
|
|||||||
poll.registry()
|
poll.registry()
|
||||||
.register(&mut icmp_socket, SERVER, Interest::READABLE)?;
|
.register(&mut icmp_socket, SERVER, Interest::READABLE)?;
|
||||||
let mut events = Events::with_capacity(32);
|
let mut events = Events::with_capacity(32);
|
||||||
let stop = Waker::new(poll.registry(), NOTIFY)?;
|
let stop = Arc::new(Waker::new(poll.registry(), NOTIFY)?);
|
||||||
let worker = stop_manager.add_listener("icmp_proxy".into(), move || {
|
let _stop = stop.clone();
|
||||||
|
let _worker = stop_manager.add_listener("icmp_proxy".into(), move || {
|
||||||
if let Err(e) = stop.wake() {
|
if let Err(e) = stop.wake() {
|
||||||
log::warn!("stop icmp_proxy:{:?}", e);
|
log::warn!("stop icmp_proxy:{:?}", e);
|
||||||
}
|
}
|
||||||
})?;
|
})?;
|
||||||
// linux上收不到通知,原因未知
|
|
||||||
drop(worker);
|
|
||||||
let mut buf = [0u8; 65535 - 20 - 8];
|
let mut buf = [0u8; 65535 - 20 - 8];
|
||||||
loop {
|
loop {
|
||||||
poll.poll(&mut events, None)?;
|
poll.poll(&mut events, None)?;
|
||||||
|
|||||||
@@ -101,14 +101,13 @@ fn tcp_proxy(
|
|||||||
let mut events = Events::with_capacity(32);
|
let mut events = Events::with_capacity(32);
|
||||||
let mut tcp_map: HashMap<usize, ProxyValue> = HashMap::with_capacity(16);
|
let mut tcp_map: HashMap<usize, ProxyValue> = HashMap::with_capacity(16);
|
||||||
let mut mapping: HashMap<usize, usize> = HashMap::with_capacity(16);
|
let mut mapping: HashMap<usize, usize> = HashMap::with_capacity(16);
|
||||||
let stop = Waker::new(poll.registry(), NOTIFY)?;
|
let stop = Arc::new(Waker::new(poll.registry(), NOTIFY)?);
|
||||||
let worker = stop_manager.add_listener("tcp_proxy".into(), move || {
|
let _stop = stop.clone();
|
||||||
|
let _worker = stop_manager.add_listener("tcp_proxy".into(), move || {
|
||||||
if let Err(e) = stop.wake() {
|
if let Err(e) = stop.wake() {
|
||||||
log::warn!("stop tcp_proxy:{:?}", e);
|
log::warn!("stop tcp_proxy:{:?}", e);
|
||||||
}
|
}
|
||||||
})?;
|
})?;
|
||||||
// linux上收不到通知,原因未知
|
|
||||||
drop(worker);
|
|
||||||
loop {
|
loop {
|
||||||
poll.poll(&mut events, None)?;
|
poll.poll(&mut events, None)?;
|
||||||
if stop_manager.is_stop() {
|
if stop_manager.is_stop() {
|
||||||
@@ -376,6 +375,11 @@ fn readable_handle(
|
|||||||
let mut buf = [0; BUF_LEN];
|
let mut buf = [0; BUF_LEN];
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
if mid_buf.len() >= BUF_LEN {
|
||||||
|
// 达到上限不再继续读取
|
||||||
|
log::warn!("达到上限不再继续读取 {:?}->{:?}",stream1,stream2);
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
match stream1.read(&mut buf) {
|
match stream1.read(&mut buf) {
|
||||||
Ok(len) => {
|
Ok(len) => {
|
||||||
if len == 0 {
|
if len == 0 {
|
||||||
@@ -410,11 +414,6 @@ fn readable_handle(
|
|||||||
}
|
}
|
||||||
mid_buf.reserve(buf.len());
|
mid_buf.reserve(buf.len());
|
||||||
mid_buf.put_slice(buf);
|
mid_buf.put_slice(buf);
|
||||||
if mid_buf.len() >= BUF_LEN {
|
|
||||||
// 达到上限不再继续读取
|
|
||||||
log::warn!("达到上限不再继续读取");
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
if e.kind() == io::ErrorKind::WouldBlock {
|
if e.kind() == io::ErrorKind::WouldBlock {
|
||||||
|
|||||||
Reference in New Issue
Block a user