diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2a364d5..56d0ac5 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -358,6 +358,14 @@
 	     i460_mux/i460_mux_test.ok \
 	     $(NULL)
 
+if ENABLE_LIBSCTP
+if ENABLE_SCTP_TESTS
+EXTRA_DIST += socket/socket_sctp_test.ok socket/socket_sctp_test.err
+check_PROGRAMS += socket/socket_sctp_test
+socket_socket_sctp_test_SOURCES = socket/socket_sctp_test.c
+endif
+endif
+
 DISTCLEANFILES = atconfig atlocal conv/gsm0503_test_vectors.c
 BUILT_SOURCES = conv/gsm0503_test_vectors.c
 noinst_HEADERS = conv/conv.h
diff --git a/tests/socket/socket_sctp_test.c b/tests/socket/socket_sctp_test.c
new file mode 100644
index 0000000..e70b8be
--- /dev/null
+++ b/tests/socket/socket_sctp_test.c
@@ -0,0 +1,233 @@
+/*
+ * (C) 2017 by Harald Welte <laforge@gnumonks.org>
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <inttypes.h>
+
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+
+#include <osmocom/core/application.h>
+#include <osmocom/core/utils.h>
+#include <osmocom/core/socket.h>
+#include <osmocom/core/logging.h>
+#include <osmocom/core/bits.h>
+
+#include "../config.h"
+
+void *ctx = NULL;
+
+#ifdef HAVE_LIBSCTP
+static uint16_t sock_get_local_port(int fd, bool is_v6) {
+	struct sockaddr_storage sa;
+	struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
+	struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
+	socklen_t len = sizeof(sa);
+	int local_port;
+
+	OSMO_ASSERT(getsockname(fd, (struct sockaddr*)&sa, &len) == 0);
+	if(!is_v6)
+		local_port = osmo_load16be(&sin->sin_port);
+	else
+		local_port = osmo_load16be(&sin6->sin6_port);
+	//printf("Checking osmo_sock_init2_multiaddr() port: %" PRIu16 "\n", listen_port_v4);
+	return local_port;
+}
+
+/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */
+static int test_sockinit2_multiaddr(const char **addrv4_loc, const char **addrv6_loc,
+				    const char **addrv4_rem, const char **addrv6_rem,
+				    size_t addrv4_size, size_t addrv6_size)
+{
+	int fd, rc;
+	int listen_fd_v4, listen_fd_v6;
+	int listen_port_v4, listen_port_v6;
+
+	printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port\n");
+
+	listen_fd_v4 = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
+				       addrv4_loc, addrv4_size, 0,
+				       NULL, 0, 0, OSMO_SOCK_F_BIND);
+	OSMO_ASSERT(listen_fd_v4 >= 0);
+	/* expect it to be blocking */
+	rc = fcntl(listen_fd_v4, F_GETFL);
+	OSMO_ASSERT(!(rc & O_NONBLOCK));
+
+	listen_port_v4 = sock_get_local_port(listen_fd_v4, false);
+
+	printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port\n");
+
+	listen_fd_v6 = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,
+				       addrv6_loc, addrv6_size, 0,
+				       NULL, 0, 0, OSMO_SOCK_F_BIND);
+	OSMO_ASSERT(listen_fd_v6 >= 0);
+	/* expect it to be blocking */
+	rc = fcntl(listen_fd_v6, F_GETFL);
+	OSMO_ASSERT(!(rc & O_NONBLOCK));
+
+	listen_port_v6 = sock_get_local_port(listen_fd_v6, true);
+
+	printf("Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK\n");
+	fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
+				       addrv4_loc, addrv4_size, 0,
+				       NULL, 0, 0, OSMO_SOCK_F_BIND|OSMO_SOCK_F_NONBLOCK);
+	OSMO_ASSERT(fd >= 0);
+	/* expect it to be blocking */
+	rc = fcntl(fd, F_GETFL);
+	OSMO_ASSERT(rc & O_NONBLOCK);
+	close(fd);
+
+	printf("Checking osmo_sock_init2_multiaddr() for invalid flags\n");
+	fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
+				       addrv4_loc, addrv4_size, 0,
+				       NULL, 0, 0, 0);
+	OSMO_ASSERT(fd < 0);
+
+	printf("Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT\n");
+	fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
+				       addrv4_rem, addrv4_size, 0,
+				       addrv4_rem, addrv4_size, listen_port_v4,
+				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+	OSMO_ASSERT(fd >= 0);
+
+	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6\n");
+	fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+				       addrv4_rem, addrv4_size, 0,
+				       addrv6_rem, addrv6_size, listen_port_v6,
+				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+	OSMO_ASSERT(fd < 0);
+
+	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4\n");
+	fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+				       addrv6_rem, addrv6_size, 0,
+				       addrv4_rem, addrv4_size, listen_port_v4,
+				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+	OSMO_ASSERT(fd < 0);
+
+	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");
+	fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+				       addrv4_rem, addrv4_size, 0,
+				       addrv4_rem, addrv4_size, listen_port_v4,
+				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+	OSMO_ASSERT(fd >= 0);
+
+	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6\n");
+	fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+				       addrv6_rem, addrv6_size, 0,
+				       addrv6_rem, addrv6_size, listen_port_v6,
+				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+	OSMO_ASSERT(fd >= 0);
+
+	close(listen_fd_v4);
+	close(listen_fd_v6);
+	printf("Done\n");
+	return 0;
+}
+
+/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */
+static int test_sockinit2_multiaddr_simple(void)
+{
+	const char *addrv4_loc[] = { "0.0.0.0" };
+	const char *addrv6_loc[] = { "::" };
+	const char *addrv4_rem[] = { "127.0.0.1" };
+	const char *addrv6_rem[] = { "::1" };
+
+	return test_sockinit2_multiaddr(addrv4_loc, addrv6_loc,
+					addrv4_rem, addrv6_rem, 1, 1);
+}
+
+/* Test API osmo_sock_init2_multiaddr with several local/remote address */
+static int test_sockinit2_multiaddr_several(void)
+{
+	const char *addrv4_localhost[] = { "127.0.0.1", "127.0.0.2" };
+	const char *addrv6_localhost[] = { "::1" };
+
+	return test_sockinit2_multiaddr(addrv4_localhost, addrv6_localhost,
+					addrv4_localhost, addrv6_localhost, 2, 1);
+}
+
+/* Test API osmo_sock_init2_multiaddr with several local/remote address, using both ipv4+v6 */
+static int test_sockinit2_multiaddr_mixed(void)
+{
+	const char *addr_localhost[] = { "127.0.0.1", "127.0.0.2", "::1" };
+	size_t addr_size = ARRAY_SIZE(addr_localhost);
+
+	int listen_fd, listen_port, fd;
+
+	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails\n");
+	listen_fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
+				       addr_localhost, addr_size, 0,
+				       NULL, 0, 0, OSMO_SOCK_F_BIND);
+	OSMO_ASSERT(listen_fd < 0);
+
+	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails\n");
+	listen_fd = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,
+				       addr_localhost, addr_size, 0,
+				       NULL, 0, 0, OSMO_SOCK_F_BIND);
+	OSMO_ASSERT(listen_fd < 0);
+
+	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds\n");
+	listen_fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+				       addr_localhost, addr_size, 0,
+				       NULL, 0, 0, OSMO_SOCK_F_BIND);
+	OSMO_ASSERT(listen_fd >= 0);
+
+	listen_port = sock_get_local_port(listen_fd, true);
+
+	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");
+	fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+				       addr_localhost, addr_size, 0,
+				       addr_localhost, addr_size, listen_port,
+				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+	OSMO_ASSERT(fd >= 0);
+	close(fd);
+
+	close(listen_fd);
+	return 0;
+}
+#endif /* ifdef HAVE_LIBSCTP */
+
+const struct log_info_cat default_categories[] = {
+};
+
+static struct log_info info = {
+	.cat = default_categories,
+	.num_cat = ARRAY_SIZE(default_categories),
+};
+
+int main(int argc, char *argv[])
+{
+	ctx = talloc_named_const(NULL, 0, "socket_test_sctp");
+	osmo_init_logging2(ctx, &info);
+	log_set_use_color(osmo_stderr_target, 0);
+	log_set_print_filename(osmo_stderr_target, 0);
+#ifdef HAVE_LIBSCTP
+	test_sockinit2_multiaddr_simple();
+	test_sockinit2_multiaddr_several();
+	test_sockinit2_multiaddr_mixed();
+#endif /* ifdef HAVE_LIBSCTP */
+
+	return EXIT_SUCCESS;
+}
diff --git a/tests/socket/socket_sctp_test.err b/tests/socket/socket_sctp_test.err
new file mode 100644
index 0000000..996d092
--- /dev/null
+++ b/tests/socket/socket_sctp_test.err
@@ -0,0 +1,8 @@
+invalid: you have to specify either BIND or CONNECT flags
+Invalid v4 vs v6 in local vs remote addresses
+Invalid v4 vs v6 in local vs remote addresses
+invalid: you have to specify either BIND or CONNECT flags
+Invalid v4 vs v6 in local vs remote addresses
+Invalid v4 vs v6 in local vs remote addresses
+getaddrinfo(::1, 0) failed: Address family for hostname not supported
+getaddrinfo(127.0.0.1, 0) failed: Address family for hostname not supported
diff --git a/tests/socket/socket_sctp_test.ok b/tests/socket/socket_sctp_test.ok
new file mode 100644
index 0000000..7608e88
--- /dev/null
+++ b/tests/socket/socket_sctp_test.ok
@@ -0,0 +1,24 @@
+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port
+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port
+Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK
+Checking osmo_sock_init2_multiaddr() for invalid flags
+Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6
+Done
+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port
+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port
+Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK
+Checking osmo_sock_init2_multiaddr() for invalid flags
+Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6
+Done
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
diff --git a/tests/socket/socket_test.c b/tests/socket/socket_test.c
index 1d4253c..a2e103c 100644
--- a/tests/socket/socket_test.c
+++ b/tests/socket/socket_test.c
@@ -148,176 +148,6 @@
 	return 0;
 }
 
-#ifdef HAVE_LIBSCTP
-static uint16_t sock_get_local_port(int fd, bool is_v6) {
-	struct sockaddr_storage sa;
-	struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
-	struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
-	socklen_t len = sizeof(sa);
-	int local_port;
-
-	OSMO_ASSERT(getsockname(fd, (struct sockaddr*)&sa, &len) == 0);
-	if(!is_v6)
-		local_port = osmo_load16be(&sin->sin_port);
-	else
-		local_port = osmo_load16be(&sin6->sin6_port);
-	//printf("Checking osmo_sock_init2_multiaddr() port: %" PRIu16 "\n", listen_port_v4);
-	return local_port;
-}
-
-/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */
-static int test_sockinit2_multiaddr(const char **addrv4_loc, const char **addrv6_loc,
-				    const char **addrv4_rem, const char **addrv6_rem,
-				    size_t addrv4_size, size_t addrv6_size)
-{
-	int fd, rc;
-	int listen_fd_v4, listen_fd_v6;
-	int listen_port_v4, listen_port_v6;
-
-	printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port\n");
-
-	listen_fd_v4 = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
-				       addrv4_loc, addrv4_size, 0,
-				       NULL, 0, 0, OSMO_SOCK_F_BIND);
-	OSMO_ASSERT(listen_fd_v4 >= 0);
-	/* expect it to be blocking */
-	rc = fcntl(listen_fd_v4, F_GETFL);
-	OSMO_ASSERT(!(rc & O_NONBLOCK));
-
-	listen_port_v4 = sock_get_local_port(listen_fd_v4, false);
-
-	printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port\n");
-
-	listen_fd_v6 = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,
-				       addrv6_loc, addrv6_size, 0,
-				       NULL, 0, 0, OSMO_SOCK_F_BIND);
-	OSMO_ASSERT(listen_fd_v6 >= 0);
-	/* expect it to be blocking */
-	rc = fcntl(listen_fd_v6, F_GETFL);
-	OSMO_ASSERT(!(rc & O_NONBLOCK));
-
-	listen_port_v6 = sock_get_local_port(listen_fd_v6, true);
-
-	printf("Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK\n");
-	fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
-				       addrv4_loc, addrv4_size, 0,
-				       NULL, 0, 0, OSMO_SOCK_F_BIND|OSMO_SOCK_F_NONBLOCK);
-	OSMO_ASSERT(fd >= 0);
-	/* expect it to be blocking */
-	rc = fcntl(fd, F_GETFL);
-	OSMO_ASSERT(rc & O_NONBLOCK);
-	close(fd);
-
-	printf("Checking osmo_sock_init2_multiaddr() for invalid flags\n");
-	fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
-				       addrv4_loc, addrv4_size, 0,
-				       NULL, 0, 0, 0);
-	OSMO_ASSERT(fd < 0);
-
-	printf("Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT\n");
-	fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
-				       addrv4_rem, addrv4_size, 0,
-				       addrv4_rem, addrv4_size, listen_port_v4,
-				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
-	OSMO_ASSERT(fd >= 0);
-
-	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6\n");
-	fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
-				       addrv4_rem, addrv4_size, 0,
-				       addrv6_rem, addrv6_size, listen_port_v6,
-				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
-	OSMO_ASSERT(fd < 0);
-
-	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4\n");
-	fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
-				       addrv6_rem, addrv6_size, 0,
-				       addrv4_rem, addrv4_size, listen_port_v4,
-				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
-	OSMO_ASSERT(fd < 0);
-
-	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");
-	fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
-				       addrv4_rem, addrv4_size, 0,
-				       addrv4_rem, addrv4_size, listen_port_v4,
-				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
-	OSMO_ASSERT(fd >= 0);
-
-	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6\n");
-	fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
-				       addrv6_rem, addrv6_size, 0,
-				       addrv6_rem, addrv6_size, listen_port_v6,
-				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
-	OSMO_ASSERT(fd >= 0);
-
-	close(listen_fd_v4);
-	close(listen_fd_v6);
-	printf("Done\n");
-	return 0;
-}
-
-/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */
-static int test_sockinit2_multiaddr_simple(void)
-{
-	const char *addrv4_loc[] = { "0.0.0.0" };
-	const char *addrv6_loc[] = { "::" };
-	const char *addrv4_rem[] = { "127.0.0.1" };
-	const char *addrv6_rem[] = { "::1" };
-
-	return test_sockinit2_multiaddr(addrv4_loc, addrv6_loc,
-					addrv4_rem, addrv6_rem, 1, 1);
-}
-
-/* Test API osmo_sock_init2_multiaddr with several local/remote address */
-static int test_sockinit2_multiaddr_several(void)
-{
-	const char *addrv4_localhost[] = { "127.0.0.1", "127.0.0.2" };
-	const char *addrv6_localhost[] = { "::1" };
-
-	return test_sockinit2_multiaddr(addrv4_localhost, addrv6_localhost,
-					addrv4_localhost, addrv6_localhost, 2, 1);
-}
-
-/* Test API osmo_sock_init2_multiaddr with several local/remote address, using both ipv4+v6 */
-static int test_sockinit2_multiaddr_mixed(void)
-{
-	const char *addr_localhost[] = { "127.0.0.1", "127.0.0.2", "::1" };
-	size_t addr_size = ARRAY_SIZE(addr_localhost);
-
-	int listen_fd, listen_port, fd;
-
-	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails\n");
-	listen_fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
-				       addr_localhost, addr_size, 0,
-				       NULL, 0, 0, OSMO_SOCK_F_BIND);
-	OSMO_ASSERT(listen_fd < 0);
-
-	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails\n");
-	listen_fd = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,
-				       addr_localhost, addr_size, 0,
-				       NULL, 0, 0, OSMO_SOCK_F_BIND);
-	OSMO_ASSERT(listen_fd < 0);
-
-	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds\n");
-	listen_fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
-				       addr_localhost, addr_size, 0,
-				       NULL, 0, 0, OSMO_SOCK_F_BIND);
-	OSMO_ASSERT(listen_fd >= 0);
-
-	listen_port = sock_get_local_port(listen_fd, true);
-
-	printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");
-	fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
-				       addr_localhost, addr_size, 0,
-				       addr_localhost, addr_size, listen_port,
-				       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
-	OSMO_ASSERT(fd >= 0);
-	close(fd);
-
-	close(listen_fd);
-	return 0;
-}
-#endif /* ifdef HAVE_LIBSCTP */
-
 const struct log_info_cat default_categories[] = {
 };
 
@@ -335,11 +165,6 @@
 
 	test_sockinit();
 	test_sockinit2();
-#ifdef HAVE_LIBSCTP
-	test_sockinit2_multiaddr_simple();
-	test_sockinit2_multiaddr_several();
-	test_sockinit2_multiaddr_mixed();
-#endif /* ifdef HAVE_LIBSCTP */
 
 	return EXIT_SUCCESS;
 }
diff --git a/tests/socket/socket_test.err b/tests/socket/socket_test.err
index e3d3903..0f0f8da 100644
--- a/tests/socket/socket_test.err
+++ b/tests/socket/socket_test.err
@@ -2,11 +2,3 @@
 invalid: you have to specify either BIND or CONNECT flags
 Unable to find a common protocol (IPv4 or IPv6) for local host: 127.0.0.1 and remote host: ::1.
 Unable to find a common protocol (IPv4 or IPv6) for local host: ::1 and remote host: 127.0.0.1.
-invalid: you have to specify either BIND or CONNECT flags
-Invalid v4 vs v6 in local vs remote addresses
-Invalid v4 vs v6 in local vs remote addresses
-invalid: you have to specify either BIND or CONNECT flags
-Invalid v4 vs v6 in local vs remote addresses
-Invalid v4 vs v6 in local vs remote addresses
-getaddrinfo(::1, 0) failed: Address family for hostname not supported
-getaddrinfo(127.0.0.1, 0) failed: Address family for hostname not supported
diff --git a/tests/socket/socket_test.ok b/tests/socket/socket_test.ok
index 959fa84..4265be8 100644
--- a/tests/socket/socket_test.ok
+++ b/tests/socket/socket_test.ok
@@ -9,27 +9,3 @@
 Checking osmo_sock_init2(AF_UNSPEC) must fail on mixed IPv6 & IPv4
 Checking osmo_sock_init2(AF_UNSPEC) BIND + CONNECT on IPv4
 Checking osmo_sock_init2(AF_UNSPEC) BIND + CONNECT on IPv6
-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port
-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port
-Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK
-Checking osmo_sock_init2_multiaddr() for invalid flags
-Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6
-Done
-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port
-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port
-Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK
-Checking osmo_sock_init2_multiaddr() for invalid flags
-Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6
-Done
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
diff --git a/tests/testsuite.at b/tests/testsuite.at
index a4c28f9..1955800 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -313,6 +313,15 @@
 AT_CHECK([$abs_top_builddir/tests/socket/socket_test], [0], [expout], [experr])
 AT_CLEANUP
 
+AT_SETUP([socket_sctp])
+AT_KEYWORDS([socket_sctp])
+AT_SKIP_IF([! test -e $abs_top_builddir/tests/socket/socket_sctp_test])
+cat $abs_srcdir/socket/socket_sctp_test.ok > expout
+cat $abs_srcdir/socket/socket_sctp_test.err > experr
+touch experr
+AT_CHECK([$abs_top_builddir/tests/socket/socket_sctp_test], [0], [expout], [experr])
+AT_CLEANUP
+
 AT_SETUP([osmo-auc-gen])
 AT_KEYWORDS([osmo-auc-gen])
 cat $abs_srcdir/osmo-auc-gen/osmo-auc-gen_test.ok > expout
