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;