Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Vista: GetFreePort - Bind gibt nie SOCKET_ERROR

  Alt 14. Mär 2007, 17:14
Folgenden Code habe ich bisher verwendet um den nächsten freien Port zu ermitteln:

Delphi-Quellcode:
function TfrmMain.GetFreePort(ABeginPort: Integer;
  const ATCP: Boolean = false): Integer;
var
  Wsd: TWSAData;
  S: Integer;
  SockAddr: TSockAddrIn;
begin
  Result := ABeginPort;

  if WSAStartup(MAKEWORD(2, 2), Wsd) <> 0 then
    Exit;

  try
    if ATCP then
      S := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
    else
      S := Socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);

    if S = SOCKET_ERROR then
      Exit;

    SockAddr.sin_family := AF_INET;
    SockAddr.sin_addr.S_addr := inet_addr(pchar('127.0.0.1'));
    SockAddr.sin_port := htons(ABeginPort);

    while bind(S, SockAddr, SizeOf(SockAddr)) = SOCKET_ERROR do
    begin
      inc(ABeginPort);
      SockAddr.sin_port := htons(ABeginPort);
    end;
    closesocket(S);
  finally
    Result := ABeginPort;
  end;
end;
Leider funktioniert dies unter Vista nicht mehr wies scheint. Die Rückkabe von Bind ist immer 0, egal ob der Port belegt ist oder nicht ..

Hat jemand eine Idee?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat