Browse code

Merge almost identical create_socket_tcp and create_socket_tcp6

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: 1343914619-10576-1-git-send-email-arne@rfc2549.org
URL: http://article.gmane.org/gmane.network.openvpn.devel/6942
Signed-off-by: David Sommerseth <dazo@users.sourceforge.net>

Arne Schwabe authored on 2012/08/02 22:36:59
Showing 3 changed files
... ...
@@ -1567,7 +1567,7 @@ man_listen (struct management *man)
1567 1567
       else
1568 1568
 #endif
1569 1569
 	{
1570
-	  man->connection.sd_top = create_socket_tcp ();
1570
+	  man->connection.sd_top = create_socket_tcp (AF_INET);
1571 1571
 	  socket_bind (man->connection.sd_top, &man->settings.local, "MANAGEMENT");
1572 1572
 	}
1573 1573
 
... ...
@@ -1633,7 +1633,7 @@ man_connect (struct management *man)
1633 1633
   else
1634 1634
 #endif
1635 1635
     {
1636
-      man->connection.sd_cli = create_socket_tcp ();
1636
+      man->connection.sd_cli = create_socket_tcp (AF_INET);
1637 1637
       status = openvpn_connect (man->connection.sd_cli,
1638 1638
 				&man->settings.local,
1639 1639
 				5,
... ...
@@ -829,11 +829,11 @@ link_socket_update_buffer_sizes (struct link_socket *ls, int rcvbuf, int sndbuf)
829 829
  */
830 830
 
831 831
 socket_descriptor_t
832
-create_socket_tcp (void)
832
+create_socket_tcp (int af)
833 833
 {
834 834
   socket_descriptor_t sd;
835 835
 
836
-  if ((sd = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
836
+  if ((sd = socket (af, SOCK_STREAM, IPPROTO_TCP)) < 0)
837 837
     msg (M_ERR, "Cannot create TCP socket");
838 838
 
839 839
 #ifndef WIN32 /* using SO_REUSEADDR on Windows will cause bind to succeed on port conflicts! */
... ...
@@ -846,18 +846,6 @@ create_socket_tcp (void)
846 846
   }
847 847
 #endif
848 848
 
849
-#if 0
850
-  /* set socket linger options */
851
-  {
852
-    struct linger linger;
853
-    linger.l_onoff = 1;
854
-    linger.l_linger = 2;
855
-    if (setsockopt (sd, SOL_SOCKET, SO_LINGER,
856
-		    (void *) &linger, sizeof (linger)) < 0)
857
-      msg (M_ERR, "TCP: Cannot setsockopt SO_LINGER on TCP socket");
858
-  }
859
-#endif
860
-
861 849
   return sd;
862 850
 }
863 851
 
... ...
@@ -912,25 +900,6 @@ create_socket_udp6 (const unsigned int flags)
912 912
   return sd;
913 913
 }
914 914
 
915
-static socket_descriptor_t
916
-create_socket_tcp6 (void)
917
-{
918
-  socket_descriptor_t sd;
919
-
920
-  if ((sd = socket (PF_INET6, SOCK_STREAM, IPPROTO_TCP)) < 0)
921
-    msg (M_ERR, "Cannot create TCP6 socket");
922
-
923
-  /* set SO_REUSEADDR on socket */
924
-  {
925
-    int on = 1;
926
-    if (setsockopt (sd, SOL_SOCKET, SO_REUSEADDR,
927
-		    (void *) &on, sizeof (on)) < 0)
928
-      msg (M_ERR, "TCP: Cannot setsockopt SO_REUSEADDR on TCP6 socket");
929
-  }
930
-
931
-  return sd;
932
-}
933
-
934 915
 static void
935 916
 create_socket (struct link_socket *sock)
936 917
 {
... ...
@@ -942,18 +911,18 @@ create_socket (struct link_socket *sock)
942 942
 
943 943
 #ifdef ENABLE_SOCKS
944 944
       if (sock->socks_proxy)
945
-	sock->ctrl_sd = create_socket_tcp ();
945
+	sock->ctrl_sd = create_socket_tcp (AF_INET);
946 946
 #endif
947 947
     }
948 948
   else if (sock->info.proto == PROTO_TCPv4_SERVER
949 949
 	   || sock->info.proto == PROTO_TCPv4_CLIENT)
950 950
     {
951
-      sock->sd = create_socket_tcp ();
951
+      sock->sd = create_socket_tcp (AF_INET);
952 952
     }
953 953
   else if (sock->info.proto == PROTO_TCPv6_SERVER
954 954
 	   || sock->info.proto == PROTO_TCPv6_CLIENT)
955 955
     {
956
-      sock->sd = create_socket_tcp6 ();
956
+      sock->sd = create_socket_tcp (AF_INET6);
957 957
     }
958 958
   else if (sock->info.proto == PROTO_UDPv6)
959 959
     {
... ...
@@ -1304,15 +1273,7 @@ socket_connect (socket_descriptor_t *sd,
1304 1304
       if (*signal_received)
1305 1305
 	goto done;
1306 1306
 
1307
-      switch(local->addr.sa.sa_family)
1308
-	{
1309
-	case PF_INET6:
1310
-	  *sd = create_socket_tcp6 ();
1311
-	  break;
1312
-	case PF_INET:
1313
-	  *sd = create_socket_tcp ();
1314
-	  break;
1315
-	}
1307
+	*sd = create_socket_tcp (local->addr.sa.sa_family);
1316 1308
 
1317 1309
       if (bind_local)
1318 1310
         socket_bind (*sd, local, "TCP Client");
... ...
@@ -1917,7 +1878,7 @@ link_socket_init_phase2 (struct link_socket *sock,
1917 1917
 	    if (proxy_retry)
1918 1918
 	      {
1919 1919
 		openvpn_close_socket (sock->sd);
1920
-		sock->sd = create_socket_tcp ();
1920
+		sock->sd = create_socket_tcp (AF_INET);
1921 1921
 	      }
1922 1922
 	  } while (proxy_retry);
1923 1923
 	}
... ...
@@ -425,7 +425,7 @@ bool ip_or_dns_addr_safe (const char *addr, const bool allow_fqdn);
425 425
 bool mac_addr_safe (const char *mac_addr);
426 426
 bool ipv6_addr_safe (const char *ipv6_text_addr);
427 427
 
428
-socket_descriptor_t create_socket_tcp (void);
428
+socket_descriptor_t create_socket_tcp (int af);
429 429
 
430 430
 socket_descriptor_t socket_do_accept (socket_descriptor_t sd,
431 431
 				      struct link_socket_actual *act,