]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspsocket.cpp
Match USERINPUT/USEROUTPUT identifiers
[user/henk/code/inspircd.git] / src / inspsocket.cpp
index fc8bc142f9df2dfeb7ef54f4294e9fdb9dc7b8a9..86104c54d407eecaf030e3af50435410a867fc11 100644 (file)
@@ -52,7 +52,7 @@ void BufferedSocket::DoConnect(const std::string &ipaddr, int aport, unsigned lo
 BufferedSocketError BufferedSocket::BeginConnect(const std::string &ipaddr, int aport, unsigned long maxtime, const std::string &connectbindip)
 {
        irc::sockets::sockaddrs addr, bind;
-       if (!irc::sockets::aptosa(ipaddr, aport, &addr))
+       if (!irc::sockets::aptosa(ipaddr, aport, addr))
        {
                ServerInstance->Logs->Log("SOCKET", DEBUG, "BUG: Hostname passed to BufferedSocket, rather than an IP address!");
                return I_ERR_CONNECT;
@@ -61,7 +61,7 @@ BufferedSocketError BufferedSocket::BeginConnect(const std::string &ipaddr, int
        bind.sa.sa_family = 0;
        if (!connectbindip.empty())
        {
-               if (!irc::sockets::aptosa(connectbindip, 0, &bind))
+               if (!irc::sockets::aptosa(connectbindip, 0, bind))
                {
                        return I_ERR_BIND;
                }
@@ -395,6 +395,7 @@ void StreamSocket::DoWrite()
                        else if (errno == EINTR)
                        {
                                // restart interrupted syscall
+                               errno = 0;
                        }
                        else
                        {
@@ -490,44 +491,52 @@ void StreamSocket::HandleEvent(EventType et, int errornum)
        if (!error.empty())
                return;
        BufferedSocketError errcode = I_ERR_OTHER;
-       switch (et)
-       {
-               case EVENT_ERROR:
+       try {
+               switch (et)
                {
-                       if (errornum == 0)
-                               SetError("Connection closed");
-                       else
-                               SetError(strerror(errornum));
-                       switch (errornum)
+                       case EVENT_ERROR:
                        {
-                               case ETIMEDOUT:
-                                       errcode = I_ERR_TIMEOUT;
-                                       break;
-                               case ECONNREFUSED:
-                               case 0:
-                                       errcode = I_ERR_CONNECT;
-                                       break;
-                               case EADDRINUSE:
-                                       errcode = I_ERR_BIND;
-                                       break;
-                               case EPIPE:
-                               case EIO:
-                                       errcode = I_ERR_WRITE;
-                                       break;
+                               if (errornum == 0)
+                                       SetError("Connection closed");
+                               else
+                                       SetError(strerror(errornum));
+                               switch (errornum)
+                               {
+                                       case ETIMEDOUT:
+                                               errcode = I_ERR_TIMEOUT;
+                                               break;
+                                       case ECONNREFUSED:
+                                       case 0:
+                                               errcode = I_ERR_CONNECT;
+                                               break;
+                                       case EADDRINUSE:
+                                               errcode = I_ERR_BIND;
+                                               break;
+                                       case EPIPE:
+                                       case EIO:
+                                               errcode = I_ERR_WRITE;
+                                               break;
+                               }
+                               break;
+                       }
+                       case EVENT_READ:
+                       {
+                               DoRead();
+                               break;
+                       }
+                       case EVENT_WRITE:
+                       {
+                               DoWrite();
+                               break;
                        }
-                       break;
-               }
-               case EVENT_READ:
-               {
-                       DoRead();
-                       break;
-               }
-               case EVENT_WRITE:
-               {
-                       DoWrite();
-                       break;
                }
        }
+       catch (CoreException& ex)
+       {
+               ServerInstance->Logs->Log("SOCKET", ERROR, "Caught exception in socket processing on FD %d - '%s'",
+                       fd, ex.GetReason());
+               SetError(ex.GetReason());
+       }
        if (!error.empty())
        {
                ServerInstance->Logs->Log("SOCKET", DEBUG, "Error on FD %d - '%s'", fd, error.c_str());