Probleme mit asynchron Sockets (zeilenweise lesen)



  • Hi,

    Ich habe ein Paar probleme bei asynchron Sockets. Ich möchte zeilenweise die Commands vom Client empfangen, also immer bis "\n"!

    Bei normalen blocking Sockets ist das kein Problem:

    string readLine(SOCKET &sockfd)
    {
      int pos, n;
      char buffer[256];
    
      pos = 0;
    
      while (pos < 255)
      {
        n = recv(sockfd, &buffer[pos], 1, 0);
    
        if (buffer[pos] == '\n')
          break;
    
        pos++;
      }
    
      buffer[pos] = '\0';
      return buffer;
    }
    

    Diese Funktion würde solange lesen bis ein "\n" kommt und dann den Command als string wiedergeben.

    Wenn ich die Funktion jetzt aber bei asynchron Sockets anwende wird aus der while(...)-Schleife eine Art Endlosschleife, wenn der Command z.B. via telnet eingeben wird, weil ja nicht alles auf einmal kommt und recv nicht wartet bis etwas kommt.

    Das gleiche passiert z.B. auch, wenn der asynchrone Server ein File annehmen will. Wenn der Client mitten beim Senden mal stoppt oder ganz abbricht, verfällt der Server in eine Endlosschleife weil recv immer sofort zurückkehrt!

    Ich hoffe mein Problem ist klar geworden...


Anmelden zum Antworten