diff --git a/src/gsmtap_util.c b/src/gsmtap_util.c
index 9545865..c8c26c6 100644
--- a/src/gsmtap_util.c
+++ b/src/gsmtap_util.c
@@ -124,7 +124,8 @@
 	if (host == NULL)
 		host = "localhost";
 
-	return osmo_sock_init(AF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP, host, port, 0);
+	return osmo_sock_init(AF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP, host, port,
+				OSMO_SOCK_F_CONNECT);
 }
 
 int gsmtap_source_add_sink_fd(int gsmtap_fd)
@@ -138,7 +139,8 @@
 		return rc;
 
 	if (osmo_sockaddr_is_local((struct sockaddr *)&ss, ss_len) == 1) {
-		rc = osmo_sock_init_sa((struct sockaddr *)&ss, SOCK_DGRAM, IPPROTO_UDP, 1);
+		rc = osmo_sock_init_sa((struct sockaddr *)&ss, SOCK_DGRAM,
+					IPPROTO_UDP, OSMO_SOCK_F_BIND);
 		if (rc >= 0)
 			return rc;
 	}
diff --git a/src/socket.c b/src/socket.c
index 0be98b9..f1fcccd 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -6,6 +6,7 @@
 #include <osmocom/core/select.h>
 #include <osmocom/core/socket.h>
 
+#include <sys/ioctl.h>
 #include <sys/socket.h>
 #include <sys/types.h>
 
@@ -18,12 +19,16 @@
 #include <ifaddrs.h>
 
 int osmo_sock_init(uint16_t family, uint16_t type, uint8_t proto,
-		   const char *host, uint16_t port, int connect0_bind1)
+		   const char *host, uint16_t port, unsigned int flags)
 {
 	struct addrinfo hints, *result, *rp;
 	int sfd, rc, on = 1;
 	char portbuf[16];
 
+	if ((flags & (OSMO_SOCK_F_BIND | OSMO_SOCK_F_CONNECT)) ==
+		     (OSMO_SOCK_F_BIND | OSMO_SOCK_F_CONNECT))
+		return -EINVAL;
+
 	sprintf(portbuf, "%u", port);
 	memset(&hints, 0, sizeof(struct addrinfo));
 	hints.ai_family = family;
@@ -31,7 +36,7 @@
 	hints.ai_flags = 0;
 	hints.ai_protocol = proto;
 
-	if (connect0_bind1)
+	if (flags & OSMO_SOCK_F_BIND)
 		hints.ai_flags |= AI_PASSIVE;
 
 	rc = getaddrinfo(host, portbuf, &hints, &result);
@@ -44,10 +49,24 @@
 		sfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
 		if (sfd == -1)
 			continue;
-		if (connect0_bind1 == 0) {
-			if (connect(sfd, rp->ai_addr, rp->ai_addrlen) != -1)
+		if (flags & OSMO_SOCK_F_NONBLOCK) {
+			if (ioctl(sfd, FIONBIO, (unsigned char *)&on) < 0) {
+				perror("cannot set this socket unblocking");
+				close(sfd);
+				return -EINVAL;
+			}
+		}
+		if (flags & OSMO_SOCK_F_CONNECT) {
+			rc = connect(sfd, rp->ai_addr, rp->ai_addrlen);
+			if (rc != -1 || (rc == -1 && errno == EINPROGRESS))
 				break;
 		} else {
+			rc = setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR,
+							&on, sizeof(on));
+			if (rc < 0) {
+				perror("cannot setsockopt socket");
+				break;
+			}
 			if (bind(sfd, rp->ai_addr, rp->ai_addrlen) != -1)
 				break;
 		}
@@ -63,7 +82,7 @@
 	setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
 
 	/* Make sure to call 'listen' on a bound, connection-oriented sock */
-	if (connect0_bind1 == 1) {
+	if (flags & OSMO_SOCK_F_BIND) {
 		switch (type) {
 		case SOCK_STREAM:
 		case SOCK_SEQPACKET:
@@ -75,11 +94,11 @@
 }
 
 int osmo_sock_init_ofd(struct osmo_fd *ofd, int family, int type, int proto,
-			const char *host, uint16_t port, int connect0_bind1)
+			const char *host, uint16_t port, unsigned int flags)
 {
 	int sfd, rc;
 
-	sfd = osmo_sock_init(family, type, proto, host, port, connect0_bind1);
+	sfd = osmo_sock_init(family, type, proto, host, port, flags);
 	if (sfd < 0)
 		return sfd;
 
@@ -96,7 +115,7 @@
 }
 
 int osmo_sock_init_sa(struct sockaddr *ss, uint16_t type,
-		      uint8_t proto, int connect0_bind1)
+		      uint8_t proto, unsigned int flags)
 {
 	char host[NI_MAXHOST];
 	uint16_t port;
@@ -127,8 +146,7 @@
 		return s;
 	}
 
-	return osmo_sock_init(ss->sa_family, type, proto, host,
-			      port, connect0_bind1);
+	return osmo_sock_init(ss->sa_family, type, proto, host, port, flags);
 }
 
 static int sockaddr_equal(const struct sockaddr *a,
