immernoch select()
-
Hey!
Ich habe jetzt schon einige sites im inet abgeklappert und ein paar tutorials gelesen, aber bekomme die select Funktion immer noch net hin.
hier mein code:SOCKET client1, client2, client3; fd_set readfds; FD_ZERO(&readfds); FD_SET(sock, &readfds); FD_SET(client1, &readfds); FD_SET(client2, &readfds); FD_SET(client3, &readfds); struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; switch (message) /* handle the messages */ { case WM_SOCKET_NOTIFY: switch (lParam) { case FD_READ: if ((sock > client1) && (sock > client2) && (sock > client3)) { select(sock+1,&readfds,NULL,NULL,&tv); } if ((client1 > client2) && (client1 > client3) && (client1 > sock)) { select(client1+1,&readfds,NULL,NULL,&tv); } if ((client2 > client1) && (client2 > client3) && (client2 > sock)) { select(client2+1,&readfds,NULL,NULL,&tv); } if ((client3 > client1) && (client3 > client2) && (client3 > sock)) { select(client3+1,&readfds,NULL,NULL,&tv); } if (FD_ISSET(sock, &readfds)) { if (i==0) { cli_size = sizeof(cli); client1 = accept(sock,(struct sockaddr*)&cli, &cli_size); sprintf(data, "Client %s hat verbunden!%s", inet_ntoa(cli.sin_addr), crnw); i++; } if (i==1) { cli_size = sizeof(cli); client2 = accept(sock,(struct sockaddr*)&cli, &cli_size); sprintf(data, "Client %s hat verbunden!%s", inet_ntoa(cli.sin_addr), crnw); send(client1, data, strlen(data), 0); i++; } if (i==2) { cli_size = sizeof(cli); client3 = accept(sock,(struct sockaddr*)&cli, &cli_size); sprintf(data, "Client %s hat verbunden!%s", inet_ntoa(cli.sin_addr), crnw); send(client1, data, strlen(data), 0); send(client2, data, strlen(data), 0); i++; } } if (FD_ISSET(client1, &readfds)) { len = recv(client1,data,strlen(data),0); data[len]='\0'; send(client2, data, strlen(data), 0); send(client3, data, strlen(data), 0); } if (FD_ISSET(client2, &readfds)) { len = recv(client2,data,strlen(data),0); data[len]='\0'; send(client1, data, strlen(data), 0); send(client3, data, strlen(data), 0); } if (FD_ISSET(client3, &readfds)) { len = recv(client3,data,strlen(data),0); data[len]='\0'; send(client1, data, strlen(data), 0); send(client2, data, strlen(data), 0); } break; } break; ...
soweit so gut.
habe mit netstat nachgeprüft. der chatserver nimmt alle 3 clients entgegen.
also die accept() klappt. der rest aber nicht. das heißt wenn ein client was sendet kommt es bei den anderen nicht an.gruß,
wer
-
lang ist es her, mit select deshalb weiß ich nimmer genau wie es ging habe aber mal einen kleinen bouncer geschrieben mit select der code geht und ist übersichtlich.
wenn du willst schau mal unter
www.delikon.dein der c section
-
ok thx.
das hilft mir weiter.cu