Netzwerkprogrammierung - select()

Nino14

Erfahrenes Mitglied
hallo,

im Rahmen eines Schulprojektes sollen wir ein Server-Client basiertes Chatsystem entwickeln. Der Server soll unter Windows in der Konsole laufen (Winsocks). Das ist auch kein Problem der läuft schon. Der Client läuft im Großen und Ganzem auch schon, nur habe ich ein wenig Probleme mit dem Empfagen von Nachrichten. Diese wollte ich damit die recv Funktion nicht den weiteren Programmablauf blockiert über select realisieren.

Hier mal ein kleiner code ausschnitt:
PHP:
void recvMSG()
{
    FD_ZERO(&set);
    FD_SET(sock, &set);
    select(0,&set,NULL,NULL,0);
    if(FD_ISSET(sock,&set))
    {
        recv(sock,empfangen, 256,0);
        cout << "Test:"<<empfangen;
    }else{cout << "Fehler";}
}
void tasten()
{
     Tastatureingaben auswerten und Aktionen ausführen
}
int main(){
...
    while(run)
    {
        tasten();
        recvMSG();
    }
...
}
Das Problem ist jetzt das er trotzdem immer blockiert. Wenn ich dem Client dann etwas sende empfängt er das auch, blockiert aber anschließend sofort wieder.
Ich hoffe ich habe das so ausgedrückt, dass man das verstehen konnte.

Sieht da jemand den Fehler?

Achja dazu sollte ich sagen das ich das erste mal mit dem Thema Netzwerkprogrammierung arbeite.

Ich freue mich auf eure Antworten

LG Nino
 
Hallo,

der timeout-Parameter von select() muss eine gültige timval-Struktur erhalten, d.h. du solltest schon ein minimales Timeout festlegen. Ist der Parameter nämlich "NULL", dann arbeitet select() im blockierenden Modus.

Gruß
MCoder
 
Zurück