Loopback-Packete werden teileweise verschluckt



  • Hallo Leute,

    ich Arbeite gerade an einem Serverprogramm welches mehrere Clienten verwaltet.
    Um nun auf mehrer Verbindungen reagieren zu können, benutzer ich ein "FD_SET".
    Wenn ich den Server dann starte Funktioniers alles ganz gut, wenn ich aber mehrer Befehle direckt hintereinander zu dem Server auf der "127.0.0.1 (Loopback)"-Adresse sende, dann bekommt der Server nur den ersten Befehl. Die anderen Befehle werden Praktisch "verschluck". Wenn ich aber von einem anderen Recher diese Befehle sende, kommen sie komischer weise an.
    Liegt das Problem vieleicht daran das WindowsXP die Packete an die Loopback-Adresse nicht so schnell verarbeiten kann und sie somit "verschluckt"?

    Hier die Routine zum epmfangen der Daten auf den Sockts:

    while(abbruchbedingung) 
    	{
    
    			FD_ZERO(&fdSet); // FD_SET leeren
    			FD_SET(acceptSocket,&fdSet);	 // Den Socket der verbindungen annimmt hinzufügen
    
    			// alle gültigen Client-Sockets hinzufügen (nur die, die nicht INVALID_SOCKET sind)
    			FD_ARRAY_SET(clients, MAX_CLIENTS, fdSet);
    
    			rc=select(0,&fdSet,NULL,NULL,NULL); //auf Ankommende Daten warten
    			PrintError(rc);
    
    			// acceptSocket is im fd_set? => verbindung annehmen (sofern es platz hat)
    			if(FD_ISSET(acceptSocket,&fdSet)) 
    			{
    				rc = AcceptClient(acceptSocket, clients, MAX_CLIENTS);
    				if(rc >= 0)
    				{
    					//weitere Initialisierungscode......
    				}
    
    			}
    
    			// prüfen wlecher client sockets im fd_set sind
    			for(i=0;i<MAX_CLIENTS;i++) 
    			{
    				if(clients[i]!=INVALID_SOCKET)
    				{
    					if(FD_ISSET(clients[i],&fdSet))
    					{
    						//Am CLientem Liegen Daten an, also werden sie abgerufen
    						rc=recv(clients[i],buf,INC_BUFFER_SIZE,0);
    						// prüfen ob die verbindung geschlossen wurde oder ein fehler auftrat
    						if(rc==0 || rc==SOCKET_ERROR)
    						{
    							printf("Client %d hat die Verbindung geschlossen\n",i);
    							closesocket(clients[i]); // socket schliessen
    							//CLode vom Clienten Aufrufen
    							clients[i]=INVALID_SOCKET; // seinen platz wieder freigeben
    							//Weiterer Code...
    
    						} 
    						else
    						{
    							//Keine Fehler...also das Empfangende verarbeiten.
    						}
    					}
    				}
    			}
    
    	}
    

    Oder liegt das Problem einfach daran, das ich etwas vergessen habe zu machen?

    Mfg Stu



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten