From f32c17d10a8cab77dedcae10b7332e56e733fb94 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Mon, 12 Jul 2010 00:32:30 +0100 Subject: [PATCH] liblib: Added net_connect_ip_blocking(). --- src/lib/network.c | 19 ++++++++++++++++--- src/lib/network.h | 6 +++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/lib/network.c b/src/lib/network.c index af3da1e96f..abaa8c9bfc 100644 --- a/src/lib/network.c +++ b/src/lib/network.c @@ -163,8 +163,8 @@ int net_connect_ip(const struct ip_addr *ip, unsigned int port, static #endif -int net_connect_ip(const struct ip_addr *ip, unsigned int port, - const struct ip_addr *my_ip) +static int net_connect_ip_full(const struct ip_addr *ip, unsigned int port, + const struct ip_addr *my_ip, bool blocking) { union sockaddr_union so; int fd, ret, opt = 1; @@ -187,7 +187,8 @@ int net_connect_ip(const struct ip_addr *ip, unsigned int port, /* set socket options */ setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt)); - net_set_nonblock(fd, TRUE); + if (!blocking) + net_set_nonblock(fd, TRUE); /* set our own address */ if (my_ip != NULL) { @@ -217,6 +218,18 @@ int net_connect_ip(const struct ip_addr *ip, unsigned int port, return fd; } +int net_connect_ip(const struct ip_addr *ip, unsigned int port, + const struct ip_addr *my_ip) +{ + return net_connect_ip_full(ip, port, my_ip, FALSE); +} + +int net_connect_ip_blocking(const struct ip_addr *ip, unsigned int port, + const struct ip_addr *my_ip) +{ + return net_connect_ip_full(ip, port, my_ip, TRUE); +} + int net_try_bind(const struct ip_addr *ip) { union sockaddr_union so; diff --git a/src/lib/network.h b/src/lib/network.h index 6ddd9fde86..b0f2ac01f6 100644 --- a/src/lib/network.h +++ b/src/lib/network.h @@ -47,9 +47,13 @@ bool net_ip_compare(const struct ip_addr *ip1, const struct ip_addr *ip2); int net_ip_cmp(const struct ip_addr *ip1, const struct ip_addr *ip2); unsigned int net_ip_hash(const struct ip_addr *ip); -/* Connect to socket with ip address */ +/* Connect to socket with ip address. The socket and connect() is + non-blocking. */ int net_connect_ip(const struct ip_addr *ip, unsigned int port, const struct ip_addr *my_ip); +/* Like net_connect_ip(), but do a blocking connect(). */ +int net_connect_ip_blocking(const struct ip_addr *ip, unsigned int port, + const struct ip_addr *my_ip); /* Returns 0 if we can bind() as given IP, -1 if not. */ int net_try_bind(const struct ip_addr *ip); /* Connect to named UNIX socket */ -- 2.47.3