Mercurial > dovecot > core-2.2
changeset 11794:5ea9394b5ced
liblib: Added net_connect_ip_blocking().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 12 Jul 2010 00:32:30 +0100 |
parents | 24e92489d7b7 |
children | 16db2af2b831 |
files | src/lib/network.c src/lib/network.h |
diffstat | 2 files changed, 21 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/network.c Mon Jul 12 00:17:18 2010 +0100 +++ b/src/lib/network.c Mon Jul 12 00:32:30 2010 +0100 @@ -163,8 +163,8 @@ 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 @@ /* 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 @@ 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;
--- a/src/lib/network.h Mon Jul 12 00:17:18 2010 +0100 +++ b/src/lib/network.h Mon Jul 12 00:32:30 2010 +0100 @@ -47,9 +47,13 @@ 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 */