mittels select() mehrere Typen von Streams überwachen



  • Hallo,

    ich würde gerne mittels Select zwei Typen von Streams überwachen.
    Momentan möchte ich etwas Telnetclientartiges proggen und einfaches hin- und herschicken von Text klappt schon, aber der Inputstream der Tastatur blockiert und somit verpasst man was der Server in der Zwischenzeit sendet. (Während man u.U. lange in der Eingabe hängt).

    Jetzt stehe ich vor der Wahl mir etwas mit kbhit() zu basteln oder beim Selectaufruf auch noch den Tastaturstream zu überwachen.
    Zweiteres gefällt mir viel besser und beim ersten hab ich irgendwie den Verdacht die CPU Auslastung unnötig in die Höhe zu treiben....
    Ich könnte dann auch den TIMEVAL timout weglassen und select() blockierend werden lassen, was mit auch besser gefällt.

    Momentaner Codeschnipsel:

    //mySocket = schon verbundener Socket
      TIMEVAL zeit={0,0};
      while(1)
      {
        FD_ZERO(&fdSet); // Inhalt leeren
        FD_SET(mySocket,&fdSet);// den client socket hinzufügen
        //hier einen Tastaturstream hinzufügen - nur wie geht das?
        rc=select(0,&fdSet,NULL,NULL,&zeit); // <<-hier würde ich gerne auch die Tastatur überwachen
        if(rc==SOCKET_ERROR)
        {
          cout<<WSAGetLastError()<<endl;
          return 1;
        }
    
        cout<<"myTelnet>";
        cin>>buf;  //<--- Der hier blockiert
        senddata(buf); // <-- Fkt die Länge überprüft (buf overflow) sowie send() durchführt
      }
    

    Wenn das mit dem Select geht, wäre ich auch für Codeschnipsel sehr dankbar... ich lerne immer besser mit Praxis als in der Theorie...

    Gruss
    Markus



  • Nachtrag: Sorry, hab vergessen zu erwähnen, dass ich MinGW unter Windows benutze.



  • 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.



  • Geht gar ned, wenn ich mich ned täusche funzt select() nur für socket deskriptoren unter Windows.??ß



  • Du kannst "WSAEventSelect" und "WSAWaitForMultipleEvents" verwenden... damit kannst Du auf verschiedene Events gleichzeitig warten.


Anmelden zum Antworten