diff --git a/configure.ac b/configure.ac
index fbdcb57..b07a3bd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -197,6 +197,10 @@
 	LIBS=$old_LIBS
 ])
 
+AC_ARG_ENABLE([sctp-tests], [AS_HELP_STRING([--disable-sctp-tests], [Do not run socket tests requiring system SCTP support])],
+	[ENABLE_SCTP_TESTS=$enableval], [ENABLE_SCTP_TESTS="yes"])
+AM_CONDITIONAL(ENABLE_SCTP_TESTS, test x"$ENABLE_SCTP_TESTS" = x"yes")
+
 AC_ARG_ENABLE(plugin,
 	[AS_HELP_STRING(
 		[--disable-plugin],
diff --git a/debian/rules b/debian/rules
index a9d961c..afff17f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -26,7 +26,7 @@
 	dh_auto_test || (find . -name testsuite.log -exec cat {} \; ; false)
 
 override_dh_auto_configure:
-	dh_auto_configure -- --enable-static
+	dh_auto_configure -- --enable-static --disable-sctp-tests
 
 override_dh_clean:
 	dh_clean
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
