Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IndyFTP - Socket Error #10055 (https://www.delphipraxis.net/149580-indyftp-socket-error-10055-a.html)

ThYpHoOn 24. Mär 2010 14:53


IndyFTP - Socket Error #10055
 
Moin Leute,

benutze den Indy-FTP Client um Ordner zu synchronisieren. Klappt bei mir auch soweit wunderbar, nur bei meinem anderen Rechner (WinXP) kriege ich einfach einen Socket Error.

Socket Error # 10055 No buffer space available.

Ich schließe das TIdFTP-Objekt mit .Disconnect und habe es mit .Connect gestartet. Reicht das so aus? Oder lässt er durch das Disconnect immer ein Socket offen, was dann diesen Error auslöst? Wäre es dann besser mit einem .Quit das Objekt zu zerstören?

Interessant ist auch, dass die Exception bei einem PUT auftritt (ca. 100MB große Datei). Dann erstellt er nur noch eine 0Byte Datei auf dem FTP Server und geht in die Exception... Eine 5MB Datei kriegt er wunderbar hin, ebenso ein normaler Connect, DirListing, etc. Ablauf.


Greetz, ThY

shmia 24. Mär 2010 17:12

Re: IndyFTP - Socket Error #10055
 
Scheint ein bekanntes Problem des TCP/IP Stack zu sein:
http://support.microsoft.com/kb/201213/en-us
Man müsste nun in den Sourcen von TIdFTP schauen, wie gross die Blockgrösse beim Senden einer Datei ist.
MS empfiehlt nicht mehr als 64kB zu verwenden.

GHorn 25. Mär 2010 09:01

Re: IndyFTP - Socket Error #10055
 
Schon mal hier in der DP nach "10055" gesucht und
nix passendes gefunden??

ThYpHoOn 25. Mär 2010 09:07

Re: IndyFTP - Socket Error #10055
 
Danke für die Antwort, hatte mir sowas auch schon fast gedacht nur nicht so konkret im Netz gefunden.
Hab mal geprüft, meine Indy-Komponente setzt im IOHandler.SendBufferSize 32k (32768). Selbst die Halbierung auf 16384 zeigte so keine Wirkung.

Wie kann ich denn den Socket-Modus auf "nonblocking" bzw. "asynchronous" ändern?
Als anderen Verdacht habe ich auch noch, dass eventuell der Arbeitsspeicher nicht ausreicht und er versucht die 200MB Datei in den Arbeitsspeicher zu laden und scheitert?

@GHorn nicht direkt zu TIdFTP, nur zu den TCP-Sockets allgemein hatte ich etwas gefunden, was mir aber nicht wirklich weitergeholfen hat.

ThYpHoOn 26. Mär 2010 09:44

Re: IndyFTP - Socket Error #10055
 
Das vermutliche Problem liegt wohl darin das Indy FTP die komplette Datei die übertragen werden soll in den Arbeitsspeicher läd und dies scheinbar 2-Fach. Also bei einer 250MB Datei kriegt mein Prozess 500MB Arbeitsspeicher-Auslastung. Das ergibt dann wohl die Exception?!
Kennt ihr eine Einstellungsmöglichkeit für Indy um dies zu verhindern?

Assertor 30. Mär 2010 16:17

Re: IndyFTP - Socket Error #10055
 
Hallo,

Zitat:

Zitat von shmia
Scheint ein bekanntes Problem des TCP/IP Stack zu sein:
http://support.microsoft.com/kb/201213/en-us

Nein, das gilt nur für Win9x und NT 4.0, steht ja auch unten auf der Seite ;)

Zitat:

Zitat von ThYpHoOn
Hab mal geprüft, meine Indy-Komponente setzt im IOHandler.SendBufferSize 32k (32768). Selbst die Halbierung auf 16384 zeigte so keine Wirkung.

Da sehe ich auch keinen Zusammenhang.

Zitat:

Zitat von ThYpHoOn
Wie kann ich denn den Socket-Modus auf "nonblocking" bzw. "asynchronous" ändern?

Das ist nicht möglich. Indy arbeitet ausschließlich mit Blocking Sockets, so wie es MS empfiehlt.

Zitat:

Zitat von ThYpHoOn
Als anderen Verdacht habe ich auch noch, dass eventuell der Arbeitsspeicher nicht ausreicht und er versucht die 200MB Datei in den Arbeitsspeicher zu laden und scheitert?

Zitat:

Zitat von ThYpHoOn
Das vermutliche Problem liegt wohl darin das Indy FTP die komplette Datei die übertragen werden soll in den Arbeitsspeicher läd und dies scheinbar 2-Fach. Also bei einer 250MB Datei kriegt mein Prozess 500MB Arbeitsspeicher-Auslastung. Das ergibt dann wohl die Exception?!
Kennt ihr eine Einstellungsmöglichkeit für Indy um dies zu verhindern?

Ich schließe ein Speicher Problem bei so kleinen Dateien aus. Warum der Prozess statt 250 MB, 500 MB braucht: Debug Optionen sind eingeschaltet - das liegt am Delphi Memory Manager, nicht Indy.

Grundsätzlich: Die Fehlermeldung kommt vom Betriebssystem - Indy gibt diese nur weiter. Was sagt denn die Ereignisanzeige von Windows wenn der Fehler auftritt? Geht es auf besagtem XP Rechner mit einem anderen FTP Client denn (Fehler eingrenzen!)?

O.g. Meldung kenne ich nur aus dem Zusammenhang mit Trojanern unter XP, im Produktiveinsatz hab ich davon noch nicht gehört... Bitte auch noch mal mit einer sauberen XP SP3 Maschine testen (VM o.ä.).

Gruß,
Assertor


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz