From 41f793cf923808ef5fb198766483a696a763bd97 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Sat, 3 Nov 2012 23:22:27 +0100 Subject: [PATCH] FINALLY fixed super annoying reconnection issue --- ogl_editor/src/RemoteConnection.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/ogl_editor/src/RemoteConnection.c b/ogl_editor/src/RemoteConnection.c index 1c5a34c..4c81ba0 100644 --- a/ogl_editor/src/RemoteConnection.c +++ b/ogl_editor/src/RemoteConnection.c @@ -25,6 +25,7 @@ #include "../../sync/base.h" #include "../../sync/track.h" #include "rlog.h" +#include #ifndef INVALID_SOCKET #define INVALID_SOCKET -1 @@ -138,9 +139,17 @@ bool RemoteConnection_createListner() sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(1338); + int yes = 1; + if (setsockopt(s_serverSocket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) + { + perror("setsockopt"); + return false; + } + if (-1 == bind(s_serverSocket, (struct sockaddr *)&sin, sizeof(sin))) { - rlog(R_ERROR, "Unable to create server socket\n"); + perror("bind"); + rlog(R_ERROR, "Unable to bind server socket\n"); return false; } @@ -149,7 +158,7 @@ bool RemoteConnection_createListner() setBlocking(s_serverSocket, false); - rlog(R_INFO, "Creaded listner\n"); + rlog(R_INFO, "Created listner\n"); return true; } @@ -228,13 +237,10 @@ void RemoteConnection_disconnect() { #if defined(_WIN32) closesocket(s_socket); - close(s_serverSocket); #else close(s_socket); - close(s_serverSocket); #endif s_socket = INVALID_SOCKET; - s_socket = INVALID_SOCKET; rlog(R_INFO, "disconnect!\n"); @@ -417,8 +423,14 @@ void RemoteConnection_close() { if (RemoteConnection_connected()) { + rlog(R_INFO, "closing client socket %d\n", s_socket); closesocket(s_socket); s_socket = INVALID_SOCKET; } + + rlog(R_INFO, "closing socket %d\n", s_serverSocket); + + closesocket(s_serverSocket); + s_serverSocket = INVALID_SOCKET; }