Просмотр исходного кода

net3: use more specific error types for bind an address and accept a connection

ghassmo 4 лет назад
Родитель
Сommit
015f3ddefc
3 измененных файлов с 15 добавлено и 6 удалено
  1. 9 0
      src/error.rs
  2. 3 3
      src/net3/acceptor.rs
  3. 3 3
      src/net3/transport/tcp.rs

+ 9 - 0
src/error.rs

@@ -114,6 +114,15 @@ pub enum Error {
     #[error("Service stopped")]
     ServiceStopped,
 
+    #[error("Create listener bound to {0} failed")]
+    BindFailed(String),
+
+    #[error("Accept a new incoming connection from the listener {0} failed")]
+    AcceptConnectionFailed(String),
+
+    #[error("Accept a new tls connection from the listener {0} failed")]
+    AcceptTlsConnectionFailed(String),
+
     #[error("Operation failed")]
     OperationFailed,
 

+ 3 - 3
src/net3/acceptor.rs

@@ -37,18 +37,18 @@ impl Acceptor {
         match transport_name {
             TransportName::Tcp(upgrade) => {
                 let transport = TcpTransport::new(None, 1024);
-                let listener = transport.listen_on(accept_url);
+                let listener = transport.listen_on(accept_url.clone());
 
                 if let Err(err) = listener {
                     error!("Setup failed: {}", err);
-                    return Err(Error::OperationFailed)
+                    return Err(Error::BindFailed(accept_url.clone().to_string()))
                 }
 
                 let listener = listener?.await;
 
                 if let Err(err) = listener {
                     error!("Bind listener failed: {}", err);
-                    return Err(Error::OperationFailed)
+                    return Err(Error::BindFailed(accept_url.to_string()))
                 }
 
                 let listener = listener?;

+ 3 - 3
src/net3/transport/tcp.rs

@@ -21,7 +21,7 @@ impl TransportListener for TcpListener {
             Ok((s, a)) => (s, a),
             Err(err) => {
                 error!("Error listening for connections: {}", err);
-                return Err(Error::ServiceStopped)
+                return Err(Error::AcceptConnectionFailed(self.local_addr()?.to_string()))
             }
         };
         let url = socket_addr_to_url(peer_addr, "tcp")?;
@@ -36,7 +36,7 @@ impl TransportListener for (TlsAcceptor, TcpListener) {
             Ok((s, a)) => (s, a),
             Err(err) => {
                 error!("Error listening for connections: {}", err);
-                return Err(Error::ServiceStopped)
+                return Err(Error::AcceptConnectionFailed(self.1.local_addr()?.to_string()))
             }
         };
 
@@ -44,7 +44,7 @@ impl TransportListener for (TlsAcceptor, TcpListener) {
 
         if let Err(err) = stream {
             error!("Error wraping the connection with tls: {}", err);
-            return Err(Error::ServiceStopped)
+            return Err(Error::AcceptTlsConnectionFailed(self.1.local_addr()?.to_string()))
         }
 
         let url = socket_addr_to_url(peer_addr, "tcp+tls")?;