Форум: "Сети";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
ВнизПроверить, используется ли уже данный UDP порт. Найти похожие ветки
← →
DVM © (2007-05-24 14:48) [0]Для TCP делал так:
function TestTCPPort(Port: integer): boolean;
var
WSA : TWSAData;
ListenSocket: TSocket;
SockAddr : TSockAddr;
begin
result := false;
if WSAStartup($101, WSA) <> 0 then exit;
try
ListenSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if ListenSocket = INVALID_SOCKET then exit;
try
FillChar(SockAddr, SizeOf(TSockAddr), 0);
SockAddr.sin_family := AF_INET;
SockAddr.sin_port := htons(Port);
SockAddr.sin_addr.S_addr := INADDR_ANY;
if bind(ListenSocket, SockAddr, SizeOf(TSockAddr)) <> 0 then exit;
if listen(ListenSocket, SOMAXCONN) <> 0 then exit;
result := true;
finally
Closesocket(ListenSocket);
end;
finally
WSACleanup;
end;
end;
Для UDP так не проходит, если я просто заменяю
SOCK_STREAM на SOCK_DGRAM.
Что неправильно?
← →
Сергей М. © (2007-05-24 14:59) [1]
> Что неправильно?
Ответ - прямо в справке:
listen applies only to sockets that are connection oriented, for example, those of type SOCK_STREAM
← →
DVM © (2007-05-24 15:05) [2]
> Сергей М. © (24.05.07 14:59) [1]
Спасибо.
← →
Сергей М. © (2007-05-24 15:15) [3]Более того, для определения "занятости" порта вызов listen() вообще не нужен - ни при SOCK_STREAM, ни при SOCK_DGRAM.
Если порт занят, bind() вернет отказ.
← →
DVM © (2007-05-24 15:19) [4]
> Если порт занят, bind() вернет отказ.
Ясно. Буду справку внимательнее читать. :)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.045 c