![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли при попытке подключения [D6, Win95/98, WinXP]
FireMan_Alexey © (2009-02-11 00:53:00)Можно ли при попытке подключения к моему серверу, отключить клиента так, чтобы он получил ошибку сервер перегружен.
Т.е. настроить так, чтобы к моему серверу от клиента было не больше N подключений.
Просто при подключении,после Accept, если просто выполнить CloseSocket, то приходит обыкновенное событие о закрытии соединения. А мне бы хотелось, чтобы клиент получил ошибку, что сервер перегружен :)
FireMan_Alexey (2009-02-14 06:12:00) [1]>Сергей М. ©
Еще раз Спасибо :)
>Григорьев Антон ©
Вам тоже спасибо, буду опираться на оригинал статьи :)
Григорьев Антон (2009-02-13 13:23:00) [2]
> FireMan_Alexey © (11.02.09 16:55) [3]
> Спасибо! пошел изучать :)
Тогда уж изучайте в оригинале: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1060
Время от времени я нахожу какие-нибудь неточности в своих статьях и правлю их. Правлю, естественно, только в Королевстве. А на всякие сайты типа citforum'а, которые воруют статьи, эти исправления, естественно, не попадают. А ещё были случаи, когда эти копировальщики не могли даже скопировать без ошибок.
Сергей М. (2009-02-13 10:21:00) [3]точнее так:
var
MyObject: TMyObject;
..
hSocket := WSAAccept(....., Cardinal(Pointer(MyObject)));
Сергей М. (2009-02-13 10:18:00) [4]А зачем ?
Рег.функция, адрес которой надо передать параметром, предусматривает передачу пользовательских данных - dwCallbackData. Это можно с успехом приспособить для передачи адреса объеста, чей метод будет фактически выполнять проверку кондиций.
function ConditionProc(
lpCallerId,lpCallerData:PWSABuf;
lpSQOS,lpGQOS:PQOS;
lpCalleeID,lpCalleeData:PWSABuf;
g:PGroup;
SomeObject:TMyObject):Integer;
begin
Result := SomeObject.MyConditionFuncMethod(lpCallerId, lpCallerData, lpSQOS, lpGQOS, lpCalleeID, lpCalleeData, g);
end;
..
hSocket := WSAAccept(....., MyObject);
FireMan_Alexey (2009-02-12 22:39:00) [5]В смысле в WSAAccept передать :)
FireMan_Alexey (2009-02-12 22:37:00) [6]>Сергей М. ©
Я конечно понимаю, что надо создавать в другую ветку, но может подскажите как можно передать адрес не статической функции, а метода класса?
function WSAAccept(
S:TSocket;
Addr:PSockAddr;
AddrLen:PInteger;
lpfnCondition:TConditionProc;
dwCallbackData:DWORD):TSocket;
type TConditionProc=function(
lpCallerId,lpCallerData:PWSABuf;
lpSQOS,lpGQOS:PQOS;
lpCalleeID,lpCalleeData:PWSABuf;
g:PGroup;
dwCallbackData:DWORD):Integer;stdcall;
FireMan_Alexey (2009-02-11 16:55:00) [7]Спасибо! пошел изучать :)
Сергей М. (2009-02-11 08:28:00) [8]http://citforum.yspu.yar.ru/programming/delphi/sockets-2/
Сергей М. (2009-02-11 08:18:00) [9]В winsock2 - да, можно.