![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно блокировать подключения в TServerSocket [D7, WinXP]
Lucefer © (2006-01-27 13:29:00)Есть TServerSocket (stThreadBlocking) в событии OnAccept я уже имею IP адрес клиента желающего соединиться. Теперь я его сравниваю со списком BlackList и хочу его блокировать, т.е. не принимать соединение и не создавать потока. Как это сделать?
Digitman (2006-01-27 15:56:00) [1]на OnGetThread:
if ClientSocket.RemoteAddress='нежелательный адрес' then
ClientSocket.Close;
и все.
Раз ты не вернул в параметре SocketThread адрес явно созданного тобой своего трэд-объекта, по дифолту будет возвращен nil, при этом ServerSocket создаст дифолтный трэд-объект. который увидит, что ClientSocket закрыт и тут же же завершит выполнение метода ClientExecute.
> Что делать с событием ThreadStart? ничего?
Ничего.
Просто никак не обрабатывай это событие.
Lucefer (2006-01-27 15:27:00) [2]тогда, как правильней сделать?
1. Выполнять проверку на черный список непосредственно перед созданием Thread'a и передавать в созданный объект флаг о том что надо сразу же Terminate себя.
2.
2a.
На OnAccept:
if not CheckEnableIP(Socket.RemoteAddress) then begin
Socket.Close;
exit;
end;
2b
На GetThread
if ClientSocket.RemoteAddress='' then begin
SocketThread:=nil;
end else begin
SocketThread := TIOServerThread.Create( FALSE, ClientSocket);
end;
3c
Что делать с событием ThreadStart? ничего?
Digitman (2006-01-27 14:47:00) [3]Поток ты можешь и не создавать, но соединение на момент возникновения OnAccept уже установлено, и ты можешь лишь разорвать его.
Предупредить установление соединения (дабы не дать ему состояться) штатными средствами компонента нельзя.
Digitman (2006-01-27 14:44:00) [4]Никак.