Veröffentlicht 5. Juli 200619 j 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
6. Juli 200619 j 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.
6. Juli 200619 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.