]> source.dussan.org Git - tigervnc.git/commitdiff
Consistently use SocketException for socket errors
authorPierre Ossman <ossman@cendio.se>
Tue, 10 Sep 2024 14:57:24 +0000 (16:57 +0200)
committerPierre Ossman <ossman@cendio.se>
Wed, 9 Oct 2024 11:37:08 +0000 (13:37 +0200)
The behaviour is not consistent as Windows doesn't use errno for socket
errors, but Unix systems do. Always use the same exception to keep
things somewhat sane.

common/rdr/FdInStream.cxx
common/rdr/FdOutStream.cxx
common/rdr/TLSInStream.cxx
common/rdr/TLSOutStream.cxx
unix/tx/TXDialog.h
unix/vncconfig/vncconfig.cxx
unix/x0vncserver/x0vncserver.cxx
vncviewer/vncviewer.cxx
win/rfb_win32/SocketManager.cxx

index 491dc008ae31a8f9d89d3aab25f410b779947dfc..bddee482f77cd55cc2372d1d5f8d8730e24f438f 100644 (file)
@@ -92,7 +92,7 @@ size_t FdInStream::readFd(uint8_t* buf, size_t len)
   } while (n < 0 && errorNumber == EINTR);
 
   if (n < 0)
-    throw SystemException("select", errorNumber);
+    throw SocketException("select", errorNumber);
 
   if (n == 0)
     return 0;
@@ -102,7 +102,7 @@ size_t FdInStream::readFd(uint8_t* buf, size_t len)
   } while (n < 0 && errorNumber == EINTR);
 
   if (n < 0)
-    throw SystemException("read", errorNumber);
+    throw SocketException("read", errorNumber);
   if (n == 0)
     throw EndOfStream();
 
index 1f60d45b4a6e2bee8b0bc63a0ff7a80ee89c769f..1b6049caeba8f19432c2e7e907ee84cc7e85abba 100644 (file)
@@ -117,7 +117,7 @@ size_t FdOutStream::writeFd(const uint8_t* data, size_t length)
   } while (n < 0 && errorNumber == EINTR);
 
   if (n < 0)
-    throw SystemException("select", errorNumber);
+    throw SocketException("select", errorNumber);
 
   if (n == 0)
     return 0;
@@ -134,7 +134,7 @@ size_t FdOutStream::writeFd(const uint8_t* data, size_t length)
   } while (n < 0 && (errorNumber == EINTR));
 
   if (n < 0)
-    throw SystemException("write", errorNumber);
+    throw SocketException("write", errorNumber);
 
   gettimeofday(&lastWrite, nullptr);
 
index d13cee1fba47cd3ebe680742a8527c4041139f2e..f8f4fcf98a065c9f6249bc5f7fb2e4f8156cc0e8 100644 (file)
@@ -56,10 +56,10 @@ ssize_t TLSInStream::pull(gnutls_transport_ptr_t str, void* data, size_t size)
     in->readBytes((uint8_t*)data, size);
   } catch (EndOfStream&) {
     return 0;
-  } catch (SystemException &e) {
+  } catch (SocketException& e) {
     vlog.error("Failure reading TLS data: %s", e.str());
     gnutls_transport_set_errno(self->session, e.err);
-    self->saved_exception = new SystemException(e);
+    self->saved_exception = new SocketException(e);
     return -1;
   } catch (Exception& e) {
     vlog.error("Failure reading TLS data: %s", e.str());
index c2f693102079e844d6d23f1414e2e36c93545e46..ccb229e16dbd1c14334614d1ce82c26918b42d7b 100644 (file)
@@ -46,10 +46,10 @@ ssize_t TLSOutStream::push(gnutls_transport_ptr_t str, const void* data,
   try {
     out->writeBytes((const uint8_t*)data, size);
     out->flush();
-  } catch (SystemException &e) {
+  } catch (SocketException& e) {
     vlog.error("Failure sending TLS data: %s", e.str());
     gnutls_transport_set_errno(self->session, e.err);
-    self->saved_exception = new SystemException(e);
+    self->saved_exception = new SocketException(e);
     return -1;
   } catch (Exception& e) {
     vlog.error("Failure sending TLS data: %s", e.str());
index 720c50d0d3e51dc69174578b040b6d82e01deb9a..3a22fd07dbc32b2463396e44dfb2de9a7f1a8297 100644 (file)
@@ -63,7 +63,7 @@ public:
         FD_ZERO(&rfds);
         FD_SET(ConnectionNumber(dpy), &rfds);
         int n = select(FD_SETSIZE, &rfds, nullptr, nullptr, nullptr);
-        if (n < 0) throw rdr::SystemException("select",errno);
+        if (n < 0) throw rdr::SocketException("select", errno);
       }
     }
     return true;
index ab7c6315dc87b9e621e5b5b65eca5207bf15e6c7..1498bbdb58f747e7436345a01e4bdcf26676cd10 100644 (file)
@@ -330,7 +330,7 @@ int main(int argc, char** argv)
       FD_ZERO(&rfds);
       FD_SET(ConnectionNumber(dpy), &rfds);
       int n = select(FD_SETSIZE, &rfds, nullptr, nullptr, tvp);
-      if (n < 0) throw rdr::SystemException("select",errno);
+      if (n < 0) throw rdr::SocketException("select", errno);
     }
 
     XCloseDisplay(dpy);
index 802ea252e16f39e4c3827473f9d5f00645bfa2e0..b4f48e5cbf8107f3e9e131a13c93df5cc488319b 100644 (file)
@@ -441,7 +441,7 @@ int main(int argc, char** argv)
           vlog.debug("Interrupted select() system call");
           continue;
         } else {
-          throw rdr::SystemException("select", errno);
+          throw rdr::SocketException("select", errno);
         }
       }
 
index ab95c0c62afa853aaf8327130e10f970004348cc..fb358537500f73a26399871e9b1a0f423fbc449b 100644 (file)
@@ -808,7 +808,7 @@ int main(int argc, char** argv)
             vlog.debug("Interrupted select() system call");
             continue;
           } else {
-            throw rdr::SystemException("select", errno);
+            throw rdr::SocketException("select", errno);
           }
         }
 
index 57b65aefb5c667cb796dd18ee500f68519cf0bf8..2bc2f53e262c44bc7357d37dcf0850f73d3a645d 100644 (file)
@@ -67,7 +67,7 @@ void SocketManager::addListener(network::SocketListener* sock_,
     flags |= FD_ADDRESS_LIST_CHANGE;
   try {
     if (event && (WSAEventSelect(sock_->getFd(), event, flags) == SOCKET_ERROR))
-      throw rdr::SystemException("Unable to select on listener", WSAGetLastError());
+      throw rdr::SocketException("Unable to select on listener", WSAGetLastError());
 
     // requestAddressChangeEvents MUST happen after WSAEventSelect, so that the socket is non-blocking
     if (acn)
@@ -184,7 +184,7 @@ int SocketManager::checkTimeouts() {
       if (j->second.sock->outStream().hasBufferedData())
         eventMask |= FD_WRITE;
       if (WSAEventSelect(j->second.sock->getFd(), j->first, eventMask) == SOCKET_ERROR)
-        throw rdr::SystemException("unable to adjust WSAEventSelect:%u", WSAGetLastError());
+        throw rdr::SocketException("unable to adjust WSAEventSelect:%u", WSAGetLastError());
     }
   }
 
@@ -234,11 +234,11 @@ void SocketManager::processEvent(HANDLE event) {
 
       // Fetch why this event notification triggered
       if (WSAEnumNetworkEvents(ci.sock->getFd(), event, &network_events) == SOCKET_ERROR)
-        throw rdr::SystemException("unable to get WSAEnumNetworkEvents:%u", WSAGetLastError());
+        throw rdr::SocketException("unable to get WSAEnumNetworkEvents:%u", WSAGetLastError());
 
       // Cancel event notification for this socket
       if (WSAEventSelect(ci.sock->getFd(), event, 0) == SOCKET_ERROR)
-        throw rdr::SystemException("unable to disable WSAEventSelect:%u", WSAGetLastError());
+        throw rdr::SocketException("unable to disable WSAEventSelect:%u", WSAGetLastError());
 
       // Reset the event object
       WSAResetEvent(event);
@@ -266,7 +266,7 @@ void SocketManager::processEvent(HANDLE event) {
       if (ci.sock->outStream().hasBufferedData())
         eventMask |= FD_WRITE;
       if (WSAEventSelect(ci.sock->getFd(), event, eventMask) == SOCKET_ERROR)
-        throw rdr::SystemException("unable to re-enable WSAEventSelect:%u", WSAGetLastError());
+        throw rdr::SocketException("unable to re-enable WSAEventSelect:%u", WSAGetLastError());
     } catch (rdr::Exception& e) {
       vlog.error("%s", e.str());
       remSocket(ci.sock);