schorschi Geschrieben 5. Juli 2006 Teilen Geschrieben 5. Juli 2006 Hallo, ich habe ein Problem mit der recv() Methode welche ja die von einem Server gesendeten daten welche im Speicher liegen auslesen soll. Jedesmal wenn ich die Methode innnerhalb einer Schleife aufrufe um den Speicher auszulesen so bleibt der letzte Aufruf "hängen" welcher mir eigentlich als returnwert eine 0 für keine Zeichen liefern müßte. Das Progi fährt, wenn überhaupt, nach sage und schreibe bis zu 5 Minuten mit der arbeit erst wieder fort. Bisher habe ich von meinem Webserver ausgelesen und das Problem umgangen indem ich die letzten gelieferten Zeichen kannte z.B. </html> und die Schleife bei Erkennung dieser Zeichen abgebrochen habe. Allerdings möchte ich hier korrekt arbeiten und bei 0 beenden. Mein Aufruf etwas vereinfacht: char buffer[256]; do { size = recv(sock,buffer,256,0); ... } while(size>0) Wo liegt der Fehler ? Joerg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 6. Juli 2006 Teilen Geschrieben 6. Juli 2006 Wo liegt der Fehler ?Kein Fehler. recv wartet, wenn keine Daten vorliegen. Mit 0 kommt es nur zurück, wenn die Gegenstelle die Verbindung schließt. Es gibt auch nicht-blockierende Sockets, wie du die verwendest, hängt aber davon ab, welches Betriebssystem du benutzt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schorschi Geschrieben 6. Juli 2006 Autor Teilen Geschrieben 6. Juli 2006 Entwicklungsumgebung :VC++ 6.0 Betriebsystem: W2K jetzt wo Du Du es sagts. Davon habe ich auch schon gelesen, blokierend nicht blokierend. Wußte aber nicht das die recv() blokiert. Kannst Du da etwas weiter ausholen und mir die Hauptunterschiede zwischen den beiden erklären. Irendwelche Fallstricke wenn ich versuche mit nicht blokierten Socket zu arbeiten ? Gruß Joerg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.