If you've sent AUTH info, but the server doesn't support authentication, you should terminate with ::Failure, not setting the status to ST_QUIT because the socket doesn't receive further data and case ST_QUIT never get fired. Case ::nStatus == ST_AUTH If SubStr( cData, 1, 3 ) == ...