Comprobar si un puerto esta ocupado

El siguiente código muestra como comprobar si un puerto tcp esta siendo utilizado.

uses
  Windows, Winsock;
 
type
  MIB_TCPROW = record
    dwState: DWORD;
    dwLocalAddr: DWORD;
    dwLocalPort: DWORD;
    dwRemoteAddr: DWORD;
    dwRemotePort: DWORD;
  end;
  PMIB_TCPROW = ^MIB_TCPROW;
 
  MIB_TCPTABLE = record
    dwNumEntries: DWORD;
    table: array[0..0] of MIB_TCPROW;
  end;
  PMIB_TCPTABLE = ^MIB_TCPTABLE;
 
function GetTcpTable(pTcpTable: PMIB_TCPTABLE; var pdwSize: DWORD;
  bOrder: BOOL): DWORD; stdcall; external 'iphlpapi.dll';
 
function EstaOcupado(Puerto: Integer): Boolean; 
var
  TcpTable: PMIB_TCPTABLE;
  Size, i: DWORD;
begin
  Result:= FALSE;
  GetMem(TcpTable,sizeof(MIB_TCPTABLE));
  Size:= 0;
  if GetTcpTable(TcpTable, Size, TRUE) = ERROR_INSUFFICIENT_BUFFER then
  begin
    FreeMem(TcpTable);
    GetMem(TcpTable,Size);
  end;
  try
    if (GetTcpTable(TcpTable, Size, TRUE) = NO_ERROR) then
      for i:= 0 to TcpTable.dwNumEntries - 1 do
        if (TcpTable.table[i].dwState = 2) then
          if htons(TcpTable.table[i].dwLocalPort) = Puerto then
        begin
          Result:= TRUE;
          break;
        end;
  finally
    FreeMem(TcpTable);
  end;
end;