reimplemented auto reconnect for bots
authorpk910 <philipp@zoelle1.de>
Thu, 18 Oct 2012 18:52:21 +0000 (20:52 +0200)
committerpk910 <philipp@zoelle1.de>
Thu, 18 Oct 2012 18:52:21 +0000 (20:52 +0200)
src/ClientSocket.c

index d8faf26d4a0ec7c56ae3475f083b300300517df3..a624a305498337f8f2ff690144e78df2005a51c1 100644 (file)
@@ -100,9 +100,10 @@ struct ClientSocket* create_socket(char *host, int port, char *bindto, char *pas
 void connect_socket(struct ClientSocket *client) {
     client->iofd = iohandler_connect(client->host, client->port, ((client->flags & SOCKET_FLAG_SSL) ? 1 : 0), client->bind, socket_callback);
     client->iofd->data = client;
 void connect_socket(struct ClientSocket *client) {
     client->iofd = iohandler_connect(client->host, client->port, ((client->flags & SOCKET_FLAG_SSL) ? 1 : 0), client->bind, socket_callback);
     client->iofd->data = client;
+    client->flags |= SOCKET_FLAG_RECONNECT;
 }
 
 }
 
-int close_socket(struct ClientSocket *client) {
+static int _close_socket(struct ClientSocket *client) {
     if(client == NULL) return 0;
     if((client->flags & SOCKET_FLAG_CONNECTED)) {
         iohandler_printf(client->iofd, "QUIT :[NeonServ %s.%d] disconnect requested.\n", NEONSERV_VERSION, patchlevel);
     if(client == NULL) return 0;
     if((client->flags & SOCKET_FLAG_CONNECTED)) {
         iohandler_printf(client->iofd, "QUIT :[NeonServ %s.%d] disconnect requested.\n", NEONSERV_VERSION, patchlevel);
@@ -122,6 +123,12 @@ int close_socket(struct ClientSocket *client) {
     return 1;
 }
 
     return 1;
 }
 
+int close_socket(struct ClientSocket *client) { //external call (don't reconnect)
+    if(client == NULL) return 0;
+    client->flags &= ~SOCKET_FLAG_RECONNECT;
+    return _close_socket(client);
+}
+
 int destroy_socket(struct ClientSocket *client) {
     if(client == NULL) return 0;
     close_socket(client);
 int destroy_socket(struct ClientSocket *client) {
     if(client == NULL) return 0;
     close_socket(client);
@@ -235,7 +242,7 @@ static IOHANDLER_CALLBACK(socket_callback) {
         break;
     case IOEVENT_NOTCONNECTED:
     case IOEVENT_CLOSED:
         break;
     case IOEVENT_NOTCONNECTED:
     case IOEVENT_CLOSED:
-        close_socket(client);
+        _close_socket(client);
         if(client->flags & SOCKET_FLAG_RECONNECT) {
             struct timeval timeout;
             gettimeofday(&timeout, NULL);
         if(client->flags & SOCKET_FLAG_RECONNECT) {
             struct timeval timeout;
             gettimeofday(&timeout, NULL);