diff --git a/Src/Model/Network/TcpListener.cpp b/Src/Model/Network/TcpListener.cpp
index bfd7a68bb324510413f2d82fe31fbd8dd5b8b285..0a04c53e8aa16117a47200580a6444ada286c816 100644
--- a/Src/Model/Network/TcpListener.cpp
+++ b/Src/Model/Network/TcpListener.cpp
@@ -11,7 +11,10 @@ void TcpListener::acceptConnection()
 	while (this->hasPendingConnections())
 	{
 		QTcpSocket *socket = this->nextPendingConnection();
-		_sockets.push_back(socket);
+		_sockets.insert(socket);
+		QObject::connect(socket, &QTcpSocket::disconnected, [this, socket](){
+			_sockets.erase(socket);
+		});
 	}
 }
 
diff --git a/Src/Model/Network/TcpListener.h b/Src/Model/Network/TcpListener.h
index 23461d936545721274d8be19722e7248c620f9cc..58a00ddf57553a163342c24e006f712129d8a9c1 100644
--- a/Src/Model/Network/TcpListener.h
+++ b/Src/Model/Network/TcpListener.h
@@ -8,7 +8,7 @@
 
 #include "../TrackedComponents/pose/FishPose.h"
 
-#include <vector>
+#include <unordered_set>
 #include <chrono>
 
 class TcpListener : public QTcpServer
@@ -27,5 +27,5 @@ public slots:
 		std::chrono::system_clock::time_point ts);
 
 private:
-	std::vector<QTcpSocket *> _sockets;
+	std::unordered_set<QTcpSocket *> _sockets;
 };