summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2012-08-02 15:36:59 +0200
committerDavid Sommerseth <dazo@users.sourceforge.net>2012-08-06 13:46:39 +0200
commite1f6121d6c189c59b367890e82efe369e08861b4 (patch)
treedec36dc5b8b5e126d519ea863415d6b3dca39c9d
parent4806cc102655f1a829d656f6deb83e5953c5eab2 (diff)
downloadopenvpn-e1f6121d6c189c59b367890e82efe369e08861b4.tar.gz
openvpn-e1f6121d6c189c59b367890e82efe369e08861b4.tar.xz
openvpn-e1f6121d6c189c59b367890e82efe369e08861b4.zip
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>
-rw-r--r--src/openvpn/manage.c4
-rw-r--r--src/openvpn/socket.c53
-rw-r--r--src/openvpn/socket.h2
3 files changed, 10 insertions, 49 deletions
diff --git a/src/openvpn/manage.c b/src/openvpn/manage.c
index 3ef14e5..d0bb416 100644
--- a/src/openvpn/manage.c
+++ b/src/openvpn/manage.c
@@ -1567,7 +1567,7 @@ man_listen (struct management *man)
else
#endif
{
- man->connection.sd_top = create_socket_tcp ();
+ man->connection.sd_top = create_socket_tcp (AF_INET);
socket_bind (man->connection.sd_top, &man->settings.local, "MANAGEMENT");
}
@@ -1633,7 +1633,7 @@ man_connect (struct management *man)
else
#endif
{
- man->connection.sd_cli = create_socket_tcp ();
+ man->connection.sd_cli = create_socket_tcp (AF_INET);
status = openvpn_connect (man->connection.sd_cli,
&man->settings.local,
5,
diff --git a/src/openvpn/socket.c b/src/openvpn/socket.c
index eb5e180..a34e78c 100644
--- a/src/openvpn/socket.c
+++ b/src/openvpn/socket.c
@@ -829,11 +829,11 @@ link_socket_update_buffer_sizes (struct link_socket *ls, int rcvbuf, int sndbuf)
*/
socket_descriptor_t
-create_socket_tcp (void)
+create_socket_tcp (int af)
{
socket_descriptor_t sd;
- if ((sd = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
+ if ((sd = socket (af, SOCK_STREAM, IPPROTO_TCP)) < 0)
msg (M_ERR, "Cannot create TCP socket");
#ifndef WIN32 /* using SO_REUSEADDR on Windows will cause bind to succeed on port conflicts! */
@@ -846,18 +846,6 @@ create_socket_tcp (void)
}
#endif
-#if 0
- /* set socket linger options */
- {
- struct linger linger;
- linger.l_onoff = 1;
- linger.l_linger = 2;
- if (setsockopt (sd, SOL_SOCKET, SO_LINGER,
- (void *) &linger, sizeof (linger)) < 0)
- msg (M_ERR, "TCP: Cannot setsockopt SO_LINGER on TCP socket");
- }
-#endif
-
return sd;
}
@@ -912,25 +900,6 @@ create_socket_udp6 (const unsigned int flags)
return sd;
}
-static socket_descriptor_t
-create_socket_tcp6 (void)
-{
- socket_descriptor_t sd;
-
- if ((sd = socket (PF_INET6, SOCK_STREAM, IPPROTO_TCP)) < 0)
- msg (M_ERR, "Cannot create TCP6 socket");
-
- /* set SO_REUSEADDR on socket */
- {
- int on = 1;
- if (setsockopt (sd, SOL_SOCKET, SO_REUSEADDR,
- (void *) &on, sizeof (on)) < 0)
- msg (M_ERR, "TCP: Cannot setsockopt SO_REUSEADDR on TCP6 socket");
- }
-
- return sd;
-}
-
static void
create_socket (struct link_socket *sock)
{
@@ -942,18 +911,18 @@ create_socket (struct link_socket *sock)
#ifdef ENABLE_SOCKS
if (sock->socks_proxy)
- sock->ctrl_sd = create_socket_tcp ();
+ sock->ctrl_sd = create_socket_tcp (AF_INET);
#endif
}
else if (sock->info.proto == PROTO_TCPv4_SERVER
|| sock->info.proto == PROTO_TCPv4_CLIENT)
{
- sock->sd = create_socket_tcp ();
+ sock->sd = create_socket_tcp (AF_INET);
}
else if (sock->info.proto == PROTO_TCPv6_SERVER
|| sock->info.proto == PROTO_TCPv6_CLIENT)
{
- sock->sd = create_socket_tcp6 ();
+ sock->sd = create_socket_tcp (AF_INET6);
}
else if (sock->info.proto == PROTO_UDPv6)
{
@@ -1304,15 +1273,7 @@ socket_connect (socket_descriptor_t *sd,
if (*signal_received)
goto done;
- switch(local->addr.sa.sa_family)
- {
- case PF_INET6:
- *sd = create_socket_tcp6 ();
- break;
- case PF_INET:
- *sd = create_socket_tcp ();
- break;
- }
+ *sd = create_socket_tcp (local->addr.sa.sa_family);
if (bind_local)
socket_bind (*sd, local, "TCP Client");
@@ -1917,7 +1878,7 @@ link_socket_init_phase2 (struct link_socket *sock,
if (proxy_retry)
{
openvpn_close_socket (sock->sd);
- sock->sd = create_socket_tcp ();
+ sock->sd = create_socket_tcp (AF_INET);
}
} while (proxy_retry);
}
diff --git a/src/openvpn/socket.h b/src/openvpn/socket.h
index 47c6e8e..43f72dc 100644
--- a/src/openvpn/socket.h
+++ b/src/openvpn/socket.h
@@ -425,7 +425,7 @@ bool ip_or_dns_addr_safe (const char *addr, const bool allow_fqdn);
bool mac_addr_safe (const char *mac_addr);
bool ipv6_addr_safe (const char *ipv6_text_addr);
-socket_descriptor_t create_socket_tcp (void);
+socket_descriptor_t create_socket_tcp (int af);
socket_descriptor_t socket_do_accept (socket_descriptor_t sd,
struct link_socket_actual *act,