-/* ClientSocket.c - NeonServ v5.3
+/* ClientSocket.c - NeonServ v5.4
* Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
client->ident = strdup(ident);
client->realname = strdup(realname);
client->user = NULL;
+ client->network_name = NULL;
client->flags = 0;
client->bufferpos = 0;
client->traffic_in = 0;
free(client->bind);
if(client->pass)
free(client->pass);
+ if(client->network_name)
+ free(client->network_name);
free(client);
} else if(client->flags & SOCKET_FLAG_FAST_JUMP) {
client->flags &= ~SOCKET_FLAG_FAST_JUMP;
int write_socket_force(struct ClientSocket *client, char* msg, int len) {
SYNCHRONIZE(synchronized);
- printf("[send %d] %s", len, msg);
+ #ifdef HAVE_THREADS
+ putlog(LOGLEVEL_RAW, "[%d send %d] %s", getCurrentThreadID(), len, msg);
+ #else
+ putlog(LOGLEVEL_RAW, "[send %d] %s", len, msg);
+ #endif
+ int ret = 1;
if(!(client->flags & SOCKET_FLAG_HAVE_SSL) || ssl_write(client, msg, len) == -2) {
#ifdef WIN32
- send(client->sock, msg, len, 0);
+ ret = send(client->sock, msg, len, 0);
#else
- write(client->sock, msg, len);
+ ret = write(client->sock, msg, len);
#endif
}
client->traffic_out += len;
DESYNCHRONIZE(synchronized);
- return 1;
+ return ret;
}
int write_socket(struct ClientSocket *client, char* msg, int len) {
}
#endif
-void socket_loop(int timeout_seconds) {
- if(sockets == NULL) return;
+int socket_loop(int timeout_seconds) {
+ if(sockets == NULL) return 0;
int is_synchronized = 1;
SYNCHRONIZE(synchronized_recv);
fd_set fds;
ret = select(ret + 1, &fds, NULL, NULL, &timeout);
if(ret == 0) {
DESYNCHRONIZE(synchronized_recv);
- return;
+ return 1;
}
for (sock = sockets->data; sock; sock = next) {
next = sock->next;
if(is_synchronized) {
DESYNCHRONIZE(synchronized_recv);
}
+ return (ret + 1);
}
void
free(client->bind);
if(client->pass)
free(client->pass);
+ if(client->network_name)
+ free(client->network_name);
free(client);
}
free(sockets);