1010#include " globalincs/pstypes.h"
1111#include " network/chat_api.h"
1212#include " network/psnet2.h"
13+ #include " network/multi_log.h"
1314
1415#ifdef SCP_UNIX
1516#include < sys/time.h>
@@ -34,7 +35,7 @@ typedef int socklen_t;
3435
3536#define MAXCHATBUFFER 500
3637
37- SOCKET Chatsock;
38+ SOCKET Chatsock = INVALID_SOCKET ;
3839static SOCKADDR_STORAGE Chataddr;
3940int Socket_connecting = 0 ;
4041char Nick_name[33 ];
@@ -148,7 +149,6 @@ int ConnectToChatServer(char *serveraddr, char *nickname, char *trackerid)
148149
149150 if ( !psnet_get_addr (nullptr , static_cast <uint16_t >(0 ), &Chataddr) )
150151 {
151- printf (" bail!\n " );
152152 return -1 ;
153153 }
154154
@@ -216,6 +216,14 @@ int ConnectToChatServer(char *serveraddr, char *nickname, char *trackerid)
216216 return 0 ;
217217 }
218218
219+ // check for server error messages
220+ const char *msg = ChatGetString ();
221+
222+ if (msg && !strcmp (msg, " ERROR" ))
223+ {
224+ return -1 ;
225+ }
226+
219227 Socket_connected = 1 ;
220228 memset (signon_str, 0 , sizeof (signon_str));
221229 sprintf_safe (signon_str, NOX (" /USER %s %s %s :%s" ), NOX (" user" ), NOX (" user" ), NOX (" user" ), Chat_tracker_id);
@@ -245,10 +253,18 @@ int ConnectToChatServer(char *serveraddr, char *nickname, char *trackerid)
245253 */
246254void DisconnectFromChatServer ()
247255{
248- if (!Socket_connected) return ;
249- SendChatString (NOX (" /QUIT" ),1 );
250- shutdown (Chatsock,2 );
251- closesocket (Chatsock);
256+ if (Socket_connected)
257+ {
258+ SendChatString (NOX (" /QUIT" ), 1 );
259+ }
260+
261+ if (Chatsock != INVALID_SOCKET)
262+ {
263+ shutdown (Chatsock, 2 );
264+ closesocket (Chatsock);
265+ }
266+
267+ Chatsock = INVALID_SOCKET;
252268 Socket_connecting = 0 ;
253269 Socket_connected = 0 ;
254270 Input_chat_buffer[0 ] = ' \0 ' ;
@@ -466,7 +482,7 @@ char *ChatGetString(void)
466482 FD_ZERO (&read_fds);
467483 FD_SET (Chatsock,&read_fds);
468484 // Writable -- that means it's connected
469- while ( select (static_cast <int >(Chatsock+1 ), &read_fds, nullptr , nullptr , &timeout) )
485+ while ( select (static_cast <int >(Chatsock+1 ), &read_fds, nullptr , nullptr , &timeout) > 0 )
470486 {
471487 bytesread = recv (Chatsock,ch,1 ,0 );
472488 if (bytesread)
@@ -777,6 +793,15 @@ char * ParseIRCMessage(char *Line, int iMode)
777793 return NULL ;
778794 }
779795
796+ if (stricmp (szCmd,NOX (" ERROR" ))==0 )
797+ {
798+ // Server reported errors
799+ ml_printf (" Chat ERROR: %s" , szRemLine);
800+ AddChatCommandToQueue (CC_DISCONNECTED, nullptr , 0 );
801+ strcpy_s (szResponse, " ERROR" );
802+ return szResponse;
803+ }
804+
780805 if (stricmp (szCmd,NOX (" NOTICE" ))==0 )
781806 {
782807
0 commit comments