AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Fehler 10055 auf API 'connect'
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler 10055 auf API 'connect'

Ein Thema von Sanchez · begonnen am 30. Jun 2004 · letzter Beitrag vom 1. Jul 2004
Antwort Antwort
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#1

Fehler 10055 auf API 'connect'

  Alt 30. Jun 2004, 09:14
Hallo zusammen,

Ich hab ein Programm, das rund um die Uhr laufen soll und über mehrere Sockets Werte abfragt.
Da die Rechner, die diese Werte liefern teilweise nachts abgeschalten sind und gelegentlich das dortige Programm (das die Werte liefert) geschlossen und wieder mal geöffnet wird, muss sich mein Programm wieder von selbst verbinden können.

Um das zu realisieren, lass ich alle durch einen Timer einen asynchronen Thread losrennen, der mir meinen den gewünschten Rechner anpingt, und wenn der Ping erfolgreich ist, testet ob das gewünschte Port offen ist.

Funktion, die Pingt:
Delphi-Quellcode:
function Ping(const _IPAdr : string) : boolean;
var
  hICMP : DWORD;
  pierWork : PICMP_ECHO_REPLY;
  dwSize : DWORD;
begin
  Result := FALSE;
  hICMP := IcmpCreateFile;
  if (hICMP = INVALID_HANDLE_VALUE) or (_IPAdr = '0') then exit;
  try
    dwSize := SizeOf(ICMP_ECHO_REPLY)+8;
    pierWork := AllocMem(dwSize);
    try
      if IcmpSendEcho(hICMP,inet_addr(PChar(_IPAdr)),nil,0,nil,pierWork,dwSize,1000) = 0 then begin
      end else begin
        Result := TRUE;
      end;
    finally
      FreeMem(pierWork,dwSize);
    end;
  finally
    IcmpCloseHandle(hIcmp);
  end;
end;
Funktion, die das Port testet:
original von Hagen
Delphi-Quellcode:
function PortPresent(const _IPAdr : string; Port: DWord): Boolean;
var
  S: TSocket;
  A: SOCKADDR_IN;
  W: TWsaData;
begin
  Result := False;
  if WsaStartup(MakeWord(1, 1), W) = 0 then begin
    if _IPAdr <> '0then begin
      FillChar(A, SizeOf(A), 0);
      A.sin_family := AF_INET;
      A.sin_addr.S_addr := inet_addr(PChar(_IPAdr));
      A.sin_port := htons(Port);
      S := Socket(AF_INET, SOCK_STREAM, 0);

      if S <> INVALID_SOCKET then begin
        Result := WinSock.connect(S, A, SizeOf(A)) = 0;
        CloseSocket(S);
      end;
    end;
  end;
  WSACleanup;
end;
Irgendwo scheint hier auf alle Fälle der Wurm drinnen zu sein. Nach ein paar Stunden Laufzeit, in der die Verbindung nicht steht kommt bei jeden Verbindungsversuch Fehler:Windows-Socket-Fehler: Ein Socketvorgang konnte nicht ausgeführt werden, da dem System Pufferspeicher fehlte oder eine Warteschlange voll war (10055), auf API 'connect'.

Bei meinen bisherigen Tests war das der Fall, wenn der Ping erfolgreich war, das Verbinden aufs Port aber fehlgeschlagen ist.

Wie verhindere ich das? Gibt da einen Buffer, den ich leeren sollte?

grüße, daniel
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#2

Re: Fehler 10055 auf API 'connect'

  Alt 1. Jul 2004, 09:38
Sieht so aus als läge das Problem nicht an den beiden obigen Funktionen.
Das Problem tritt erst auf, nachdem die Verbindung zum Server mal dar war.

Ich hab aber gerade bemerkt, dass ich nach dem ersten erfolgreichen Verbindungsversuch immer direkt mit dem ClientSocket verbinde. Da hab ich ein Flag übersehen. Jetzt teste ich wieder vor jedem Verbindungsversuch mit obigen Funktionen. Der Test ist zwar noch am laufen, aber schon seit einer Stunde schlägt alle halben Sekunden die Funktion PortPresent fehl und es is noch am laufen.

Allerdings muss da doch ein Fehler bei meinem ClientSocket sein der noch weg muss.

Zur Zeit Schließe ich vor dem jeden Verbindungsversuch den Socket mit:

  IPClient.Socket.Close; Ich hoffe das reicht schon, sonst verzögert sich das Problem nur um ein paar Wochen/Monate.

grüße, daniel
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 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