![]() |
Server hängt manchmal ewig bei recv()
Hallo,
Ich habe eine Client-Server Anwendung, in der ganz einfach mit send() und recv() Daten ausgetauscht werden. Wie ich ![]() Das funktioniert auch fast immer, aber machmal bekommt das recv() beim Server nicht mit, wenn der Client einfach (unerwartet) geschlossen wird, also er wartet einfach ewig und die Anwendung muss neu gestartet bzw. die Verbindung muss neu aufgebaut werden. Woran kann das nur liegen? So sieht der Code ungefähr aus (unwichtiges habe ich ausgelassen):
Delphi-Quellcode:
Ich verstehe nicht, wieso recv() manchmal keinen Wert mehr zurückliefert und die Schleifen somit nicht verlassen werden.
repeat
iRecv := recv(Socket, iBufferLen, SizeOf(Integer), 0); //Länge des Pakets lesen if iRecv > 0 then begin RecvString := ''; repeat iRecv := recv(Socket, RecvBuffer, SizeOf(Buffer), 0); //(Teil)Paket lesen if iRecv > 0 begin SetLength(RecvBuffer, iRecv); RecvString := RecvString + RecvBuffer; if Length(RecvString) >= iBufferLen then begin //Paket komplett, weiter verarbeiten... end; end; until (iRecv <= 0) or ((Length(RecvString) >= iBufferLen)); end; until iRecv <= 0; //bis hier kommt es manchmal nicht!? Ich habe auch keine Möglichkeit den Status des Sockets immer wieder zu überprüfen, weil ich ja mit blockierenden Sockets arbeite. Irgendwelche Ideen? Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz