myserver-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myserver-commit] [SCM] GNU MyServer branch, master, updated. 0_9_2-169-


From: Giuseppe Scrivano
Subject: [myserver-commit] [SCM] GNU MyServer branch, master, updated. 0_9_2-169-g44ab79f
Date: Sun, 18 Apr 2010 15:30:20 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU MyServer".

The branch, master has been updated
       via  44ab79f9255ee387c703311a2435663c18be8395 (commit)
       via  0eea53d6c56cfb00ceb37baaa76bde61fd025195 (commit)
      from  2dd5e22fb5ea6d078f14dd32d5ba62264078c4d9 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------


commit 44ab79f9255ee387c703311a2435663c18be8395
Author: Giuseppe Scrivano <address@hidden>
Date:   Sun Apr 18 17:30:03 2010 +0200

    Add method `reuseAddress' and use it instead of `setsockopt' when possible

diff --git a/myserver/include/base/socket/socket.h 
b/myserver/include/base/socket/socket.h
index 6917c80..5ad6be0 100644
--- a/myserver/include/base/socket/socket.h
+++ b/myserver/include/base/socket/socket.h
@@ -83,7 +83,8 @@ public:
   Socket (SocketHandle);
   virtual ~Socket ();
   Socket* accept (MYSERVER_SOCKADDR*, socklen_t*);
-  int setsockopt (int,int, const char*,int);
+  void reuseAddress (bool);
+  int setsockopt (int, int, const char*, int);
 
   virtual int connect (MYSERVER_SOCKADDR*, int);
   virtual int close ();
diff --git a/myserver/src/base/socket/socket.cpp 
b/myserver/src/base/socket/socket.cpp
index e8d4a1c..128aaa6 100644
--- a/myserver/src/base/socket/socket.cpp
+++ b/myserver/src/base/socket/socket.cpp
@@ -364,6 +364,23 @@ int Socket::send (const char* buffer, int len, int flags)
   return 0;
 }
 
+
+/*!
+  Specify if the ip address can be re-used.
+
+  \value reuseAddr Specify if re-use the address.
+ */
+void Socket::reuseAddress (bool reuseAddr)
+{
+#ifndef WIN32
+  int optvalReuseAddr = reuseAddr ? 1 : 0;
+
+  setsockopt (SOL_SOCKET, SO_REUSEADDR,
+              (const char *) &optvalReuseAddr,
+              sizeof (optvalReuseAddr));
+#endif
+}
+
 /*!
  *Connect to the specified host:port.
  *Returns zero on success.
diff --git a/myserver/src/connections_scheduler/listen_threads.cpp 
b/myserver/src/connections_scheduler/listen_threads.cpp
index 152d75b..16d95ff 100644
--- a/myserver/src/connections_scheduler/listen_threads.cpp
+++ b/myserver/src/connections_scheduler/listen_threads.cpp
@@ -63,7 +63,6 @@ ListenThreads::ListenThreads (ConnectionsScheduler* 
scheduler, Server* server)
  */
 int ListenThreads::createServerAndListener (u_short port)
 {
-  int optvalReuseAddr = 1;
   string listenPortMsg;
 
   if (fastRebooting)
@@ -87,170 +86,81 @@ int ListenThreads::createServerAndListener (u_short port)
    */
   try
     {
-      if (serverSocketIPv4 != NULL)
-        {
-          serverSocketIPv4->socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
-          if (serverSocketIPv4->getHandle () < 0)
-            {
-              server->log (MYSERVER_LOG_MSG_ERROR,
-                            _("Error while creating the server socket"));
-              delete serverSocketIPv4;
-              serverSocketIPv4 = NULL;
-            }
-          else
-            {
-              MYSERVER_SOCKADDR_STORAGE sockServerSocketIPv4 = { 0 };
-              ((sockaddr_in*)(&sockServerSocketIPv4))->sin_family = AF_INET;
-              ((sockaddr_in*)(&sockServerSocketIPv4))->sin_addr.s_addr =
-                htonl (INADDR_ANY);
-              ((sockaddr_in*)(&sockServerSocketIPv4))->sin_port =
-                htons ((u_short)port);
-
-#ifndef WIN32
-              if (serverSocketIPv4->setsockopt (SOL_SOCKET, SO_REUSEADDR,
-                                                (const char *)&optvalReuseAddr,
-                                                sizeof (optvalReuseAddr)) < 0)
-                {
-                  server->log (MYSERVER_LOG_MSG_ERROR,
-                                 _("Error while creating the server socket"));
-
-                  delete serverSocketIPv4;
-                  serverSocketIPv4 = NULL;
-                }
-#endif
-              if (serverSocketIPv4)
-                {
-                  server->log (MYSERVER_LOG_MSG_INFO,
-                                      _("Binding the port"));
-
-                  if (!serverSocketIPv4->bind (&sockServerSocketIPv4,
-                                              sizeof (sockaddr_in)))
-                    server->log (MYSERVER_LOG_MSG_INFO, _("Port was bound"));
-                  else
-                    {
-                      server->log (MYSERVER_LOG_MSG_ERROR,
-                                          _("Error while creating the server 
socket"));
-                      delete serverSocketIPv4;
-                      serverSocketIPv4 = NULL;
-                    }
-
-                }
-            }
-        }
+      MYSERVER_SOCKADDR_STORAGE sockServerSocketIPv4 = { 0 };
+      sockaddr_in* sai = (sockaddr_in *) &sockServerSocketIPv4;
+      serverSocketIPv4->socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
+      sai->sin_family = AF_INET;
+      sai->sin_addr.s_addr = htonl (INADDR_ANY);
+      sai->sin_port = htons ((u_short) port);
+      serverSocketIPv4->reuseAddress (true);
+      server->log (MYSERVER_LOG_MSG_INFO, _("Binding the port"));
+      serverSocketIPv4->bind (&sockServerSocketIPv4, sizeof (sockaddr_in));
+      server->log (MYSERVER_LOG_MSG_INFO, _("Port was bound"));
+
+      serverSocketIPv4->listen (SOMAXCONN);
+    }
+  catch (exception & e)
+    {
+      server->log (MYSERVER_LOG_MSG_ERROR,
+                   _E ("Error while creating the server socket"), &e);
+      delete serverSocketIPv4;
+      serverSocketIPv4 = NULL;
+    }
 
 #if HAVE_IPV6
-      serverSocketIPv6 = new Socket ();
+  serverSocketIPv6 = new Socket ();
+  try
+    {
+      MYSERVER_SOCKADDR_STORAGE sockServerSocketIPv6 = { 0 };
+      sockaddr_in6 *sai = (sockaddr_in6 *)(&sockServerSocketIPv6);
+      serverSocketIPv6->socket (AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+      sai->sin6_family = AF_INET6;
+      sai->sin6_addr = in6addr_any;
+      sai->sin6_port = htons ((u_short) port);
+      serverSocketIPv6->reuseAddress (true);
 
-      if (serverSocketIPv6 != NULL)
-        {
-          serverSocketIPv6->socket (AF_INET6, SOCK_STREAM, IPPROTO_TCP);
-          if (serverSocketIPv6->getHandle () < 0)
-            {
-              server->log (MYSERVER_LOG_MSG_ERROR,
-                                 _("Error while creating the server socket"));
-              delete serverSocketIPv6;
-              serverSocketIPv6 = NULL;
-            }
-          else
-            {
-              MYSERVER_SOCKADDR_STORAGE sockServerSocketIPv6 = { 0 };
-              ((sockaddr_in6*)(&sockServerSocketIPv6))->sin6_family = AF_INET6;
-              ((sockaddr_in6*)(&sockServerSocketIPv6))->sin6_addr = 
in6addr_any;
-              ((sockaddr_in6*)(&sockServerSocketIPv6))->sin6_port =
-                htons ((u_short)port);
 # ifndef WIN32
-              if (serverSocketIPv6->setsockopt (SOL_SOCKET, SO_REUSEADDR,
-                                                (const char *)&optvalReuseAddr,
-                                                sizeof (optvalReuseAddr)) < 0)
-                {
-                  server->log (MYSERVER_LOG_MSG_ERROR,
-                                 _("Error while creating the server socket"));
-                  delete serverSocketIPv6;
-                  serverSocketIPv6 = NULL;
-                }
-
-              if (serverSocketIPv6->setsockopt (IPPROTO_IPV6, IPV6_V6ONLY,
-                                              (const char *)&optvalReuseAddr,
-                                              sizeof (optvalReuseAddr)) < 0)
-                {
-                  server->log (MYSERVER_LOG_MSG_ERROR,
-                                 _("Error while creating the server socket"));
-                  delete serverSocketIPv6;
-                  serverSocketIPv6 = NULL;
-                }
+      int one = 1;
+      serverSocketIPv6->setsockopt (IPPROTO_IPV6, IPV6_V6ONLY,
+                                    (const char *) &one,
+                                    sizeof (one));
 # endif
-              if (serverSocketIPv6)
-                {
-                  server->log (MYSERVER_LOG_MSG_INFO,
-                                      _("Binding the port"));
-
-                  if (!serverSocketIPv6->bind (&sockServerSocketIPv6,
-                                               sizeof (sockaddr_in6)))
-                    server->log (MYSERVER_LOG_MSG_INFO,
-                                        _("Port was bound"));
-                  else
-                    {
-                      server->log (MYSERVER_LOG_MSG_ERROR,
-                                 _("Error while creating the server socket"));
-                      delete serverSocketIPv6;
-                      serverSocketIPv6 = NULL;
-                    }
-                }
-            }
-        }
-#endif // HAVE_IPV6
-
-      if (serverSocketIPv4 == NULL && serverSocketIPv6 == NULL)
-        {
-          delete si;
-          return 1;
-        }
-
-      if (serverSocketIPv4 != NULL && serverSocketIPv4->listen (SOMAXCONN))
-        {
-          server->log (MYSERVER_LOG_MSG_ERROR,
-                             _("Error while creating the server socket"));
-          delete serverSocketIPv4;
-          serverSocketIPv4 = NULL;
-        }
+      server->log (MYSERVER_LOG_MSG_INFO, _("Binding the port"));
+      serverSocketIPv6->bind (&sockServerSocketIPv6,  sizeof (sockaddr_in6));
+      server->log (MYSERVER_LOG_MSG_INFO, _("Port was bound"));
+      serverSocketIPv6->listen (SOMAXCONN);
+    }
+  catch (exception & e)
+    {
+      server->log (MYSERVER_LOG_MSG_ERROR,
+                   _("Error while creating the server socket"));
+      delete serverSocketIPv6;
+      serverSocketIPv6 = NULL;
+    }
+#endif
 
-      if (serverSocketIPv6 != NULL && serverSocketIPv6->listen (SOMAXCONN))
-        {
-          server->log (MYSERVER_LOG_MSG_ERROR,
-                             _("Error while creating the server socket"));
-          delete serverSocketIPv6;
-          serverSocketIPv6 = NULL;
-        }
+  if (serverSocketIPv4 == NULL && serverSocketIPv6 == NULL)
+    {
+      delete si;
+      return 1;
+    }
 
-      if (serverSocketIPv4 == NULL && serverSocketIPv6 == NULL)
-        {
-          delete si;
-          return 1;
-        }
+  if (serverSocketIPv4 == NULL && serverSocketIPv6 == NULL)
+    {
+      delete si;
+      return 1;
+    }
 
-      server->log (MYSERVER_LOG_MSG_INFO,
-                          _("Listening on the port: %i"), port);
+  server->log (MYSERVER_LOG_MSG_INFO, _("Listening on the port: %i"), port);
 
-      si->ipv4 = serverSocketIPv4;
-      si->ipv6 = serverSocketIPv6;
+  si->ipv4 = serverSocketIPv4;
+  si->ipv6 = serverSocketIPv6;
 
-      usedPorts.put (port, si);
+  usedPorts.put (port, si);
 
-      registerListener (si);
+  registerListener (si);
 
-      return 0;
-    }
-  catch (bad_alloc &ba)
-    {
-      server->log (MYSERVER_LOG_MSG_ERROR, _("Bad alloc: %s"),
-                          ba.what ());
-    }
-  catch (exception &e)
-    {
-      server->log (MYSERVER_LOG_MSG_ERROR, _("Error: %s"),
-                          e.what ());
-    };
-  return 1;
+  return 0;
 }
 
 /*!
@@ -264,11 +174,11 @@ void ListenThreads::registerListener (SocketInformation* 
si)
       scheduler->listener (&(si->laIpv4));
     }
 
-    if (si->ipv6)
-      {
-        si->laIpv6.reset (si->ipv6, si->port, server);
-        scheduler->listener (&(si->laIpv6));
-      }
+  if (si->ipv6)
+    {
+      si->laIpv6.reset (si->ipv6, si->port, server);
+      scheduler->listener (&(si->laIpv6));
+    }
 }
 
 /*!
diff --git a/myserver/src/protocol/ftp/ftp.cpp 
b/myserver/src/protocol/ftp/ftp.cpp
index 3ae3867..28373f8 100644
--- a/myserver/src/protocol/ftp/ftp.cpp
+++ b/myserver/src/protocol/ftp/ftp.cpp
@@ -1536,38 +1536,41 @@ Ftp::openDataPassive ()
     static_cast < FtpuserData * >(td.pConnection->protocolBuffer);
 
   Socket *pSocket = new Socket ();
-  pSocket->socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
-  if (pSocket->getHandle () < 0)
-    return 0;
 
-  int nReuseAddr = 1;
-  MYSERVER_SOCKADDR_STORAGE storage = { 0 };
-  ((sockaddr_in *) (&storage))->sin_family = AF_INET;
-  char szIpAddr[16];
-  memset (szIpAddr, 0, 16);
-  getIpAddr (pFtpuserData->m_cdh, szIpAddr, 16);
+  try
+    {
+      pSocket->socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
+      MYSERVER_SOCKADDR_STORAGE storage = { 0 };
+      ((sockaddr_in *) (&storage))->sin_family = AF_INET;
+      char szIpAddr[16];
+      memset (szIpAddr, 0, 16);
+      getIpAddr (pFtpuserData->m_cdh, szIpAddr, 16);
 #ifdef WIN32
-  ((sockaddr_in *) (&storage))->sin_addr.s_addr = inet_addr (szIpAddr);
+      ((sockaddr_in *) (&storage))->sin_addr.s_addr = inet_addr (szIpAddr);
 #else
-  inet_aton (szIpAddr, &((sockaddr_in *) (&storage))->sin_addr);
+      inet_aton (szIpAddr, &((sockaddr_in *) (&storage))->sin_addr);
 #endif
-  ((sockaddr_in *) (&storage))->sin_port =
-    htons (getPortNo (pFtpuserData->m_cdh));
-  if (pSocket->setsockopt (SOL_SOCKET, SO_REUSEADDR, (const char *) 
&nReuseAddr,
-                           sizeof (nReuseAddr)) < 0)
-    return 0;
+      ((sockaddr_in *) (&storage))->sin_port =
+        htons (getPortNo (pFtpuserData->m_cdh));
+      pSocket->reuseAddress (true);
 
-  if (pSocket->bind (&storage, sizeof (sockaddr_in)) != 0
-      || pSocket->listen (SOMAXCONN) != 0)
-    return 0;
+      pSocket->bind (&storage, sizeof (sockaddr_in));
+      pSocket->listen (SOMAXCONN);
+
+      pFtpuserData->m_pDataConnection->setPort (getPortNo 
(pFtpuserData->m_cdh));
+      pFtpuserData->m_pDataConnection->setLocalPort 
(pFtpuserData->m_nLocalDataport);
+      pFtpuserData->m_pDataConnection->setIpAddr (td.pConnection->getIpAddr 
());
+      pFtpuserData->m_pDataConnection->setLocalIpAddr 
(td.pConnection->getLocalIpAddr ());
+      pFtpuserData->m_pDataConnection->host = td.pConnection->host;
+      pFtpuserData->m_pDataConnection->socket = pSocket;
+      pFtpuserData->m_pDataConnection->setScheduled (1);
+    }
+  catch (...)
+    {
+      delete pSocket;
+      return 0;
+    }
 
-  pFtpuserData->m_pDataConnection->setPort (getPortNo (pFtpuserData->m_cdh));
-  pFtpuserData->m_pDataConnection->setLocalPort 
(pFtpuserData->m_nLocalDataport);
-  pFtpuserData->m_pDataConnection->setIpAddr (td.pConnection->getIpAddr ());
-  pFtpuserData->m_pDataConnection->setLocalIpAddr 
(td.pConnection->getLocalIpAddr ());
-  pFtpuserData->m_pDataConnection->host = td.pConnection->host;
-  pFtpuserData->m_pDataConnection->socket = pSocket;
-  pFtpuserData->m_pDataConnection->setScheduled (1);
   return 1;
 }
 



commit 0eea53d6c56cfb00ceb37baaa76bde61fd025195
Author: Giuseppe Scrivano <address@hidden>
Date:   Sun Apr 18 16:47:11 2010 +0200

    Remove `Socket::ioctlsocket'

diff --git a/myserver/include/base/socket/socket.h 
b/myserver/include/base/socket/socket.h
index b601c7b..6917c80 100644
--- a/myserver/include/base/socket/socket.h
+++ b/myserver/include/base/socket/socket.h
@@ -92,7 +92,6 @@ public:
   virtual int recv (char*, int, int);
   virtual u_long bytesToRead ();
 
-  int ioctlsocket (long, unsigned long*);
   int send (const char*, int, int);
   int connect (const char* host, u_short port);
   int operator==(Socket*);
diff --git a/myserver/src/base/socket/socket.cpp 
b/myserver/src/base/socket/socket.cpp
index c1b6ec2..e8d4a1c 100644
--- a/myserver/src/base/socket/socket.cpp
+++ b/myserver/src/base/socket/socket.cpp
@@ -365,14 +365,6 @@ int Socket::send (const char* buffer, int len, int flags)
 }
 
 /*!
- *Function used to control the socket.
- */
-int Socket::ioctlsocket (long cmd, unsigned long* argp)
-{
-  return checked::checkError (gnulib::ioctl (fd, cmd, argp));
-}
-
-/*!
  *Connect to the specified host:port.
  *Returns zero on success.
  */
@@ -564,10 +556,10 @@ u_long Socket::bytesToRead ()
   u_long nBytesToRead = 0;
 
 #ifdef FIONREAD
-  ioctlsocket (FIONREAD,&nBytesToRead);
+  checked::checkError (gnulib::ioctl (fd, FIONREAD, &nBytesToRead));
 #else
 # ifdef I_NREAD
-  ::ioctlsocket ( I_NREAD, &nBytesToRead ) ;
+  checked::checkError (gnulib::ioctl (fd, I_NREAD, &nBytesToRead));
 # endif
 #endif
   return nBytesToRead;
@@ -588,7 +580,7 @@ int Socket::setNonBlocking (int nonBlocking)
 
 #ifdef WIN32
   u_long nonblock = nonBlocking ? 1 : 0;
-  ret = ioctlsocket (FIONBIO, &nonblock);
+  ret = checked::checkError (gnulib::ioctl (fd, FIONBIO, &nonblock));
 #else
   flags = checked::checkError (gnulib::fcntl (fd, F_GETFL, 0));
   if (flags < 0)

-----------------------------------------------------------------------

Summary of changes:
 myserver/include/base/socket/socket.h              |    4 +-
 myserver/src/base/socket/socket.cpp                |   21 ++-
 .../src/connections_scheduler/listen_threads.cpp   |  226 ++++++--------------
 myserver/src/protocol/ftp/ftp.cpp                  |   57 +++---
 4 files changed, 115 insertions(+), 193 deletions(-)


hooks/post-receive
-- 
GNU MyServer




reply via email to

[Prev in Thread] Current Thread [Next in Thread]