diff --git a/src/net/tcp_server_socket.cpp b/src/net/tcp_server_socket.cpp
index bfbc618a64500326a3d62407eac9309c7990e51c..8f309ca39dfcf5c8ebd4363c55ea8118dc586389 100644
--- a/src/net/tcp_server_socket.cpp
+++ b/src/net/tcp_server_socket.cpp
@@ -22,48 +22,59 @@
 
 #include "macros.hpp"
 #include "net/socketaddress.hpp"
+#include "net/tcp_client.hpp"
 
 
 namespace rmrf::net {
 
-tcp_server_socket::tcp_server_socket(uint16_t port, incoming_client_listener_type client_listener_) :
-		ss{nullptr}, client_listener(client_listener_), number_of_connected_clients(0) {
-	auto_fd raw_socket_fd{socket(AF_INET6, SOCK_STREAM, 0)};
-	if(!raw_socket_fd.valid()) {
+tcp_server_socket::tcp_server_socket(socketaddr socket_identifier, incoming_client_listener_type client_listener_) :
+	ss{nullptr}, client_listener(client_listener_), number_of_connected_clients(0) {
+	auto_fd socket_fd{socket(socket_identifier.family(), SOCK_STREAM, 0)};
+	if(!socket_fd.valid()) {
 		// TODO implement propper error handling
 		throw netio_exception("Failed to create socket fd.");
 	}
 
-	sockaddr_in6 addr;
-	addr.sin6_family = AF_INET6;
-	addr.sin6_port = htons(port);
-	addr.sin6_addr = IN6ADDR_ANY_INIT;
-	socketaddr sa{addr};
-
-	if (bind(raw_socket_fd.get(), sa.ptr(), sa.size()) != 0) {
+	if (bind(socket_fd.get(), socket_identifier.ptr(), socket_identifier.size()) != 0) {
 		std::string msg = "Failed to bind to all addresses (FIXME)";
-		if (port < 1024) {
-			msg += "\nYou tried to bind to a port smaller than 1024. Are you root?";
-		}
 
+		if (socket_identifier.family() == AF_INET6 || socket_identifier.family() == AF_INET) {
+			// TODO find a nice way to check for the port
+			/*
+			 if (port < 1024) {
+			 	 msg += "\nYou tried to bind to a port smaller than 1024. Are you root?";
+			 }
+			 */
+		}
 		throw netio_exception(msg);
 	}
 
 	// Append the non blocking flag to the file state of the socket fd.
 	// This might be linux only. We should check that
-	fcntl(raw_socket_fd.get(), F_SETFL, fcntl(raw_socket_fd.get(), F_GETFL, 0) | O_NONBLOCK);
-	if (listen(raw_socket_fd.get(), 5) == -1) {
+	fcntl(socket_fd.get(), F_SETFL, fcntl(socket_fd.get(), F_GETFL, 0) | O_NONBLOCK);
+	if (listen(socket_fd.get(), 5) == -1) {
 		throw netio_exception("Failed to enable listening mode for raw socket");
 	}
 
-	this->ss = std::make_shared<async_server_socket>(std::forward<auto_fd>(raw_socket_fd));
+	this->ss = std::make_shared<async_server_socket>(std::forward<auto_fd>(socket_fd));
 
 	using namespace std::placeholders;
 	this->ss->set_accept_handler(std::bind(&tcp_server_socket::await_raw_socket_incomming, this, _1, _2));
+
+}
+
+static inline socketaddr get_ipv6_socketaddr(const uint16_t port) {
+	sockaddr_in6 addr;
+	addr.sin6_family = AF_INET6;
+	addr.sin6_port = htons(port);
+	addr.sin6_addr = IN6ADDR_ANY_INIT;
+	socketaddr sa{addr};
+	return sa;
 }
 
+tcp_server_socket::tcp_server_socket(const uint16_t port, incoming_client_listener_type client_listener_) :
+		tcp_server_socket{get_ipv6_socketaddr(port), client_listener_} { }
 
-// As we're not depending on the actual async server object we need to suppress the warning that we're not using it.
 
 void tcp_server_socket::await_raw_socket_incomming(async_server_socket::self_ptr_type ass, const auto_fd& socket) {
 	MARK_UNUSED(ass);
diff --git a/src/net/tcp_server_socket.hpp b/src/net/tcp_server_socket.hpp
index d49151ae6bb7f9b5412746c3164764f79a2da4cc..06feec59ef4bacc65e5989bcff1c9a79db58a27d 100644
--- a/src/net/tcp_server_socket.hpp
+++ b/src/net/tcp_server_socket.hpp
@@ -12,6 +12,7 @@
 
 #include "net/async_server.hpp"
 #include "net/netio_exception.hpp"
+#include "net/socketaddress.hpp"
 #include "net/tcp_client.hpp"
 
 namespace rmrf::net {
@@ -25,7 +26,8 @@ private:
 	incoming_client_listener_type client_listener;
 	std::atomic_uint32_t number_of_connected_clients;
 public:
-	tcp_server_socket(uint16_t port, incoming_client_listener_type client_listener_);
+	tcp_server_socket(const uint16_t port, incoming_client_listener_type client_listener_);
+	tcp_server_socket(socketaddr socket_identifier, incoming_client_listener_type client_listener_);
 	int get_number_of_connected_clients() const;
 private:
 	void await_raw_socket_incomming(async_server_socket::self_ptr_type ass, const auto_fd& socket);