mehrere clients mit winsock
-
int annehmen() { FD_ZERO(&fdSetRead); FD_SET(acceptSocket,&fdSetRead); for(u=0;u<MAX_CLIENTS;u++) { if(clients[u]!=INVALID_SOCKET) { FD_SET(clients[u],&fdSetRead); } } rc=select(0,&fdSetRead,NULL,NULL,NULL); if(rc==SOCKET_ERROR) MessageBox(NULL,"SOCKET_ERROR","",MB_OK); if(FD_ISSET(acceptSocket,&fdSetRead)) { for(u=0;u<MAX_CLIENTS;u++) { if(clients[u]==INVALID_SOCKET) { clients[u]=accept(acceptSocket,NULL,NULL); MessageBox(NULL,"Neuen Client angenommen","",MB_OK); break; } } //einen freien platz für den neuen client suchen, und die verbingung annehmen } for(u=0;u<MAX_CLIENTS;u++) { if(clients[u]==INVALID_SOCKET) { continue; // ungültiger socket, d.h. kein verbunder client an dieser position im array } if(FD_ISSET(clients[u],&fdSetRead)) {int x=0,c; long rc2; timeout.tv_sec=0; timeout.tv_usec=0; rc=select(0,&fdSetRead,NULL,NULL,&timeout); if(rc>0) { PlaySound("sounds\\goonigugu.wav",NULL,SND_FILENAME|SND_ASYNC); if(FD_ISSET(clients[u],&fdSetRead)) { rc2=recv(clients[u],buf3,1024,0); if(rc2==0 || rc2==SOCKET_ERROR) { MessageBox(hwnd,"Client hat die Verbindung geschlossen","",MB_OK); closesocket(clients[u]); // socket schliessen clients[u]=INVALID_SOCKET; // seinen platz wieder freigeben } } if(sounds()==-1) { strncat(buf,buf3,rc2); SetWindowText(hedit1,buf); SendMessage( hedit1, WM_VSCROLL, SB_BOTTOM, 0 ); } } } } }was is daran falsch???? wenn ich mit nem client drauf geh passiert nix (programm hängt)
-
Bei deinem ersten select()-Aufruf übergibst du als letzten Parameter NULL, das steht für blockierende Operation. Könnte das die Ursache sein?
Rob'