+void
+putsock(struct ClientSocket *client, const char *text, ...)
+{
+ va_list arg_list;
+ char sendBuf[MAXLEN];
+ int pos;
+ if (!(client->flags & SOCKET_FLAG_CONNECTED)) return;
+ sendBuf[0] = '\0';
+ va_start(arg_list, text);
+ pos = vsnprintf(sendBuf, MAXLEN - 2, text, arg_list);
+ va_end(arg_list);
+ if (pos < 0 || pos > (MAXLEN - 2)) pos = MAXLEN - 2;
+ sendBuf[pos] = '\n';
+ sendBuf[pos+1] = '\0';
+ write_socket(client, sendBuf, pos+1);
+}
+
+struct ClientSocket* getBots(int flags, struct ClientSocket* last_bot) {
+ struct ClientSocket *sock = (last_bot ? last_bot->next : sockets->data);
+ if(sock == NULL) return NULL;
+ for (; sock; sock = sock->next) {
+ if(!flags || (sock->flags & flags) == flags)
+ return sock;
+ }
+ return NULL;
+}
+
+void free_sockets() {
+ if(!sockets) return;
+ struct ClientSocket *client, *next;
+ for (client = sockets->data; client; client = next) {
+ next = client->next;
+ if((client->flags & SOCKET_FLAG_CONNECTED))
+ close(client->sock);
+ free(client->host);
+ free(client->pass);
+ free(client);
+ }
+ free(sockets);
+ sockets = NULL;
+}