summaryrefslogtreecommitdiff
path: root/src/vhost_user/slave.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/vhost_user/slave.rs')
-rw-r--r--src/vhost_user/slave.rs86
1 files changed, 0 insertions, 86 deletions
diff --git a/src/vhost_user/slave.rs b/src/vhost_user/slave.rs
deleted file mode 100644
index fb65c41..0000000
--- a/src/vhost_user/slave.rs
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (C) 2019 Alibaba Cloud Computing. All rights reserved.
-// SPDX-License-Identifier: Apache-2.0
-
-//! Traits and Structs for vhost-user slave.
-
-use std::sync::Arc;
-
-use super::connection::{Endpoint, Listener};
-use super::message::*;
-use super::{Result, SlaveReqHandler, VhostUserSlaveReqHandler};
-
-/// Vhost-user slave side connection listener.
-pub struct SlaveListener<S: VhostUserSlaveReqHandler> {
- listener: Listener,
- backend: Option<Arc<S>>,
-}
-
-/// Sets up a listener for incoming master connections, and handles construction
-/// of a Slave on success.
-impl<S: VhostUserSlaveReqHandler> SlaveListener<S> {
- /// Create a unix domain socket for incoming master connections.
- pub fn new(listener: Listener, backend: Arc<S>) -> Result<Self> {
- Ok(SlaveListener {
- listener,
- backend: Some(backend),
- })
- }
-
- /// Accept an incoming connection from the master, returning Some(Slave) on
- /// success, or None if the socket is nonblocking and no incoming connection
- /// was detected
- pub fn accept(&mut self) -> Result<Option<SlaveReqHandler<S>>> {
- if let Some(fd) = self.listener.accept()? {
- return Ok(Some(SlaveReqHandler::new(
- Endpoint::<MasterReq>::from_stream(fd),
- self.backend.take().unwrap(),
- )));
- }
- Ok(None)
- }
-
- /// Change blocking status on the listener.
- pub fn set_nonblocking(&self, block: bool) -> Result<()> {
- self.listener.set_nonblocking(block)
- }
-}
-
-#[cfg(test)]
-mod tests {
- use std::sync::Mutex;
-
- use super::*;
- use crate::vhost_user::dummy_slave::DummySlaveReqHandler;
-
- #[test]
- fn test_slave_listener_set_nonblocking() {
- let backend = Arc::new(Mutex::new(DummySlaveReqHandler::new()));
- let listener =
- Listener::new("/tmp/vhost_user_lib_unit_test_slave_nonblocking", true).unwrap();
- let slave_listener = SlaveListener::new(listener, backend).unwrap();
-
- slave_listener.set_nonblocking(true).unwrap();
- slave_listener.set_nonblocking(false).unwrap();
- slave_listener.set_nonblocking(false).unwrap();
- slave_listener.set_nonblocking(true).unwrap();
- slave_listener.set_nonblocking(true).unwrap();
- }
-
- #[cfg(feature = "vhost-user-master")]
- #[test]
- fn test_slave_listener_accept() {
- use super::super::Master;
-
- let path = "/tmp/vhost_user_lib_unit_test_slave_accept";
- let backend = Arc::new(Mutex::new(DummySlaveReqHandler::new()));
- let listener = Listener::new(path, true).unwrap();
- let mut slave_listener = SlaveListener::new(listener, backend).unwrap();
-
- slave_listener.set_nonblocking(true).unwrap();
- assert!(slave_listener.accept().unwrap().is_none());
- assert!(slave_listener.accept().unwrap().is_none());
-
- let _master = Master::connect(path, 1).unwrap();
- let _slave = slave_listener.accept().unwrap().unwrap();
- }
-}