- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
// If iMode!=0, non-blocking mode is enabled.
u_long iMode=1;
ioctlsocket(Socket,FIONBIO,&iMode);
// Main loop
for(;;)
{
// Display message from server
char buffer[1000];
memset(buffer,0,999);
int inDataLength=recv(Socket,buffer,1000,0);
std::cout<<buffer;
int nError=WSAGetLastError();
if(nError!=WSAEWOULDBLOCK&&nError!=0)
{
std::cout<<"Winsock error code: "<<nError<<"\r\n";
std::cout<<"Server disconnected!\r\n";
// Shutdown our socket
shutdown(Socket,SD_SEND);
// Close our socket entirely
closesocket(Socket);
break;
}
Sleep(1000);
}
http://www.win32developer.com/tutorial/winsock/winsock_tutorial_3.shtm
Вот как нада работать с сокетами... (строка 27).
P.S. пока писал коммент - опередили :)
А вообще по-хорошему do... while с условием, а аппендикс переместить за цикл и break не нужен.
Ваш КО.
Разве, что, в одном компиляторе while(1) у меня выдавало предупреждение, поэтому лучше while(true) (оно не выдавало), но это слишком длинно, поэтому лучше for (;;).
while true do
begin
end;
взамен
for(;;){}
?
Да я, написав это, успею после работы в Крайзис поиграть ещё...
особо ленивые могут добавить обвеса до forобразного цикла
...
until false;
PROFIT
Я могу даже так. Тут больше PROFIT. )
а потом
И:
)))
Сочувствую и понимаю вашу боль. У меня в одном модуле нечто подобное написано финнской коллегой. Сначала везде тыркают non-blocking mode - потому что пара крутых консультантов им сказала что это оч круто - а потом пишут нечто подобное потому что на самом деле в коде нужно MSG_WAITALL.
ЗЫ мне тот memset() больше нравится.