Вниз
Скачать: CL | DM;

Проверить, используется ли уже данный 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.014 c
2-1200670447
Daskel
2008-01-18 18:34
2008.02.10
Отправка строки по сети


15-1199963354
Layner
2008-01-10 14:09
2008.02.10
Люди, объясните в чем подвох, сам разобрать не могу


15-1199882770
TUser
2008-01-09 15:46
2008.02.10
Имеют ли лицензии "обратную силу"


4-1182240688
Dib@zol
2007-06-19 12:11
2008.02.10
Наборы векторов из символа шрифта


15-1199741614
Кодерщик
2008-01-08 00:33
2008.02.10
Чем плох Delphi?




   Наверх