summaryrefslogtreecommitdiff
path: root/MySpace/server_con.cpp
diff options
context:
space:
mode:
author(no author) <(no author)@4f64403b-2f21-0410-a795-97e2b3489a10>2008-07-14 10:40:27 +0000
committer(no author) <(no author)@4f64403b-2f21-0410-a795-97e2b3489a10>2008-07-14 10:40:27 +0000
commitc37566e93cc0d7ac224a280c04ec7ca1dcfc1c66 (patch)
treedd006e4758a55a6b3bbc1fd8f8b81e05e74339c5 /MySpace/server_con.cpp
parent93ae1d436de6c4816e84002bfdd6a515e00018cb (diff)
reorganised connection process, fixed occasional crash
git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@416 4f64403b-2f21-0410-a795-97e2b3489a10
Diffstat (limited to 'MySpace/server_con.cpp')
-rw-r--r--MySpace/server_con.cpp29
1 files changed, 7 insertions, 22 deletions
diff --git a/MySpace/server_con.cpp b/MySpace/server_con.cpp
index 4c295c0..06735e9 100644
--- a/MySpace/server_con.cpp
+++ b/MySpace/server_con.cpp
@@ -246,7 +246,7 @@ int waitcallback(unsigned int *timeout) {
return server_stop ? 0 : 1;
}
-int try_ports[9] = {1863, 6660,6661,6662,6665,6668,6669,80,0443};
+int try_ports[9] = {1863,6660,6661,6662,6665,6668,6669,80,443};
void try_login(NetMessage &msg, HANDLE connection) {
char nonce[NONCE_SIZE * 2 + 2], *nc1 = nonce, *nc2 = nonce + NONCE_SIZE;
@@ -379,20 +379,13 @@ void __cdecl ServerThreadFunc(void*) {
if(connection) Netlib_CloseHandle(connection);
QueueUserAPC(sttMainThreadStatusCallback, mainThread, conn_stat++);
connection = (HANDLE)CallService(MS_NETLIB_OPENCONNECTION, (WPARAM)hNetlibUser, (LPARAM)&conn_data);
- if(!connection) {
- if(tries < 9) {
- conn_data.wPort = try_ports[tries++];
- } else {
- ProtoBroadcastAck(MODULE, 0, ACKTYPE_LOGIN, ACKRESULT_FAILED, (HANDLE)0, (LPARAM)LOGINERR_NOSERVER);
- break;
- }
- }
}
- bytes = Netlib_Recv(connection, (char *)pbuff, SERVER_READ_BUFFER_SIZE - (pbuff - recv_buffer), MSG_DUMPASTEXT);
- buffer_bytes += bytes;
- pbuff[bytes] = 0;
-
- if(bytes == 0) {
+ if(connection) {
+ bytes = Netlib_Recv(connection, (char *)pbuff, SERVER_READ_BUFFER_SIZE - (pbuff - recv_buffer), MSG_DUMPASTEXT);
+ buffer_bytes += bytes;
+ pbuff[bytes] = 0;
+ }
+ if(connection == 0 || bytes == 0 || bytes == SOCKET_ERROR) {
//PUShowMessage("Connection closed", SM_NOTIFY);
if(login && tries < 9) {
conn_data.wPort = try_ports[tries++];
@@ -400,14 +393,6 @@ void __cdecl ServerThreadFunc(void*) {
if(login) ProtoBroadcastAck(MODULE, 0, ACKTYPE_LOGIN, ACKRESULT_FAILED, (HANDLE)0, (LPARAM)LOGINERR_NOSERVER);
break;
}
- } else if(bytes == SOCKET_ERROR) {
- //PUShowMessage("Socket ERROR", SM_NOTIFY);
- if(login && tries < 9) {
- conn_data.wPort = try_ports[tries++];
- } else {
- if(login) ProtoBroadcastAck(MODULE, 0, ACKTYPE_LOGIN, ACKRESULT_FAILED, (HANDLE)0, (LPARAM)LOGINERR_NOSERVER);
- break;
- }
} else {
if(login) {
QueueUserAPC(sttMainThreadStatusCallback, mainThread, conn_stat++);