blob: 96c62c06fa20a070b22f5f61ff4d414b8b7de777 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
$NetBSD: patch-ab,v 1.3 2008/05/11 04:12:34 tonnerre Exp $
--- src/icqd-chat.cpp.orig 2007-09-09 14:05:24.000000000 +0200
+++ src/icqd-chat.cpp
@@ -23,6 +23,7 @@
// Localization
#include "gettext.h"
+#define MAX_CONNECTS 256
#define DEBUG_THREADS(x)
@@ -2383,16 +2384,24 @@ void *ChatManager_tep(void *arg)
// Connection on the server port ---------------------------------------
else if (nCurrentSocket == chatman->chatServer.Descriptor())
{
- CChatUser *u = new CChatUser;
- u->m_pClient = new CChatClient;
-
- chatman->chatServer.RecvConnection(u->sock);
- chatman->sockman.AddSocket(&u->sock);
- chatman->sockman.DropSocket(&u->sock);
-
- u->state = CHAT_STATE_HANDSHAKE;
- chatman->chatUsers.push_back(u);
- gLog.Info(tr("%sChat: Received connection.\n"), L_TCPxSTR);
+ if (chatman->sockman.Num() >= MAX_CONNECTS)
+ {
+ // Too many sockets, drop this one
+ gLog.Warn(tr("%sToo many connected clients, rejecting new connection.\n"), L_WARNxSTR);
+ }
+ else
+ {
+ CChatUser *u = new CChatUser;
+ u->m_pClient = new CChatClient;
+
+ chatman->chatServer.RecvConnection(u->sock);
+ chatman->sockman.AddSocket(&u->sock);
+ chatman->sockman.DropSocket(&u->sock);
+
+ u->state = CHAT_STATE_HANDSHAKE;
+ chatman->chatUsers.push_back(u);
+ gLog.Info(tr("%sChat: Received connection.\n"), L_TCPxSTR);
+ }
}
// Message from connected socket----------------------------------------
|