diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-07-14 16:25:46 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-07-14 16:25:46 +0000 |
| commit | fef680ba11abb4d8dc88b6fb39e3bf139ac165e0 (patch) | |
| tree | e8368f2799e9616d09b981aac348e35d304f1c70 /src/engine | |
| parent | 0ff824ffcc81393e1cf10b13d6101d18a3ccc855 (diff) | |
| download | zcatch-fef680ba11abb4d8dc88b6fb39e3bf139ac165e0.tar.gz zcatch-fef680ba11abb4d8dc88b6fb39e3bf139ac165e0.zip | |
fixed duplicated connects problem
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/network.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/engine/network.cpp b/src/engine/network.cpp index e95022f9..2313010e 100644 --- a/src/engine/network.cpp +++ b/src/engine/network.cpp @@ -510,18 +510,32 @@ int net_server_recv(NETSERVER *s, NETPACKET *packet) // ok packet, process it if(data.flags == NETWORK_PACKETFLAG_CONNECT) { - // client that wants to connect int found = 0; + + // check if we already got this client for(int i = 0; i < NETWORK_MAX_CLIENTS; i++) { - if(s->slots[i].conn.state == NETWORK_CONNSTATE_OFFLINE) + if(net_addr4_cmp(&s->slots[i].conn.peeraddr, &addr) == 0) { - conn_feed(&s->slots[i].conn, &data, &addr); - found = 1; + found = 1; // silent ignore.. we got this client already break; } } + // client that wants to connect + if(!found) + { + for(int i = 0; i < NETWORK_MAX_CLIENTS; i++) + { + if(s->slots[i].conn.state == NETWORK_CONNSTATE_OFFLINE) + { + conn_feed(&s->slots[i].conn, &data, &addr); + found = 1; + break; + } + } + } + if(!found) { // TODO: send error |