Лучше for(;;), вроде даже _Great_ на этом форуме рассказывал почему.
Код:
if ( stArgv.bLog == TRUE )
Сравнивать явно с условием ИСТИНА "считается" плохим тоном здесь, но даже не в этом дело, а в том, что в C++ никто не обещал существование константы TRUE.
Код:
uVal = 1;
ioctlsocket(sockAcc, FIONBIO, &uVal);
...
do
nLen = recv(sockData, &cDummy, sizeof ( cDummy ), 0);
while ( (nLen > 0) && (cDummy != cCond) );
У вас сервер по временам центральный ЦП не кушает под 100%? Холостой цикл (в общем случае успешный select, который вы сделали по-выше вас не спасет).
Код:
typedef struct tag_SOCKS4_REQUEST
{
BYTE ucVersion;
BYTE ucCommand;
WORD wDestPort;
DWORD dwDestIp;
} SOCKS4_REQUEST;
typedef struct tag_CONFIG_STRUCT
{
int nPort;
u_long ulListen;
BOOL bLog;
} CONFIG_STRUCT;
typedef struct tag_THREAD_ARGV_STRUCT
{
SOCKET sockParam;
sockaddr_in saParam;
BOOL bLog;
} THREAD_ARGV_STRUCT;
В С++ typedef ненужно писать перед объявлением структуры, имя структуры также является именем соответствующего типа даных.
Код:
closesocket(sockClnt);
shutdown(sockClnt, 0);
Код:
closesocket(sockAcc);
shutdown(sockAcc, 0);
...
----------------------
А вообще мне понравилось, хоть и нет в этом никакого смысла!
----------------------