]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/socket.cpp
typo
[wxWidgets.git] / src / common / socket.cpp
index ee1365dbaa585a5bc55189598fe122c13b049ac6..a5b9eff86a8b12630f04bb16152cc682047bebdc 100644 (file)
@@ -1198,6 +1198,20 @@ bool wxSocketBase::SetOption(int level, int optname, const void *optval,
     return true;
 }
 
+bool wxSocketBase::SetLocal(wxSockAddress& local)
+{
+  GAddress* la = local.GetAddress();
+
+  if (la && la->m_addr)
+  {
+    m_socket->SetLocal(la);
+
+    return true;
+  }
+
+  return false;
+}
+
 // ==========================================================================
 // wxSocketClient
 // ==========================================================================
@@ -1219,7 +1233,7 @@ wxSocketClient::~wxSocketClient()
 // Connect
 // --------------------------------------------------------------------------
 
-bool wxSocketClient::Connect(wxSockAddress& addr_man, bool wait)
+bool wxSocketClient::DoConnect(wxSockAddress& addr_man, wxSockAddress* local, bool wait)
 {
   GSocketError err;
 
@@ -1249,6 +1263,21 @@ bool wxSocketClient::Connect(wxSockAddress& addr_man, bool wait)
   if (!wait)
     m_socket->SetNonBlocking(1);
 
+  // Reuse makes sense for clients too, if we are trying to rebind to the same port
+  if (GetFlags() & wxSOCKET_REUSEADDR)
+  {
+    m_socket->SetReusable();
+  }
+
+  // Bind to the local IP address and port, when provided
+  if (local)
+  {
+    GAddress* la = local->GetAddress();
+
+    if (la && la->m_addr)
+      m_socket->SetLocal(la);
+  }
+
   m_socket->SetPeer(addr_man.GetAddress());
   err = m_socket->Connect(GSOCK_STREAMED);
 
@@ -1267,6 +1296,16 @@ bool wxSocketClient::Connect(wxSockAddress& addr_man, bool wait)
   return true;
 }
 
+bool wxSocketClient::Connect(wxSockAddress& addr_man, bool wait)
+{
+  return (DoConnect(addr_man, NULL, wait));
+}
+
+bool wxSocketClient::Connect(wxSockAddress& addr_man, wxSockAddress& local, bool wait)
+{
+  return (DoConnect(addr_man, &local, wait));
+}
+
 bool wxSocketClient::WaitOnConnect(long seconds, long milliseconds)
 {
   if (m_connected)                      // Already connected