Support poll multiple packets

This commit is contained in:
Anmin Liu
2024-05-16 04:22:31 +00:00
committed by Tate, Hongliang Tian
parent 646406115e
commit 878e8a88f4
6 changed files with 118 additions and 128 deletions

View File

@ -101,8 +101,6 @@ impl Connected {
}
let vsockspace = VSOCK_GLOBAL.get().unwrap();
vsockspace.reset(&connection.info).unwrap();
vsockspace.remove_connected_socket(&self.id());
vsockspace.recycle_port(&self.local_addr().port);
connection.set_local_shutdown();
}
Ok(())
@ -143,19 +141,6 @@ impl Connected {
}
}
impl Drop for Connected {
fn drop(&mut self) {
let connection = self.connection.lock_irq_disabled();
if connection.is_local_shutdown() {
return;
}
let vsockspace = VSOCK_GLOBAL.get().unwrap();
vsockspace.reset(&connection.info).unwrap();
vsockspace.remove_connected_socket(&self.id());
vsockspace.recycle_port(&self.local_addr().port);
}
}
struct Connection {
info: ConnectionInfo,
buffer: HeapRb<u8>,

View File

@ -66,15 +66,6 @@ impl Init {
}
}
impl Drop for Init {
fn drop(&mut self) {
if let Some(addr) = *self.bound_addr.lock() {
let vsockspace = VSOCK_GLOBAL.get().unwrap();
vsockspace.recycle_port(&addr.port);
}
}
}
impl Default for Init {
fn default() -> Self {
Self::new()

View File

@ -3,7 +3,7 @@
use super::connected::Connected;
use crate::{
events::IoEvents,
net::socket::vsock::{addr::VsockSocketAddr, VSOCK_GLOBAL},
net::socket::vsock::addr::VsockSocketAddr,
prelude::*,
process::signal::{Pollee, Poller},
};
@ -31,8 +31,9 @@ impl Listen {
pub fn push_incoming(&self, connect: Arc<Connected>) -> Result<()> {
let mut incoming_connections = self.incoming_connection.lock_irq_disabled();
if incoming_connections.len() >= self.backlog {
return_errno_with_message!(Errno::ENOMEM, "queue in listenging socket is full")
return_errno_with_message!(Errno::ECONNREFUSED, "queue in listenging socket is full")
}
// FIXME: check if the port is already used
incoming_connections.push_back(connect);
Ok(())
}
@ -62,11 +63,3 @@ impl Listen {
}
}
}
impl Drop for Listen {
fn drop(&mut self) {
let vsockspace = VSOCK_GLOBAL.get().unwrap();
vsockspace.recycle_port(&self.addr.port);
vsockspace.remove_listen_socket(&self.addr);
}
}

View File

@ -339,3 +339,28 @@ impl Socket for VsockStreamSocket {
}
}
}
impl Drop for VsockStreamSocket {
fn drop(&mut self) {
let vsockspace = VSOCK_GLOBAL.get().unwrap();
let inner = self.status.read();
match &*inner {
Status::Init(init) => {
if let Some(addr) = init.bound_addr() {
vsockspace.recycle_port(&addr.port);
}
}
Status::Listen(listen) => {
vsockspace.recycle_port(&listen.addr().port);
vsockspace.remove_listen_socket(&listen.addr());
}
Status::Connected(connected) => {
if !connected.is_closed() {
vsockspace.reset(&connected.get_info()).unwrap();
}
vsockspace.remove_connected_socket(&connected.id());
vsockspace.recycle_port(&connected.local_addr().port);
}
}
}
}