Comments (5)
function TIocpMultiAcceptThread.AddListen(aServer: TTcpConnectionServer):
Boolean;
begin
FAcceptEventLocker.Enter;
Result := FServerCount <= 63;
if Result then
begin
FAcceptEventType := etAdd;
FAcceptEventServer := aServer;
SetEvent(FAcceptEvent);
end
else
FAcceptEventLocker.Leave;
end;
procedure TIocpMultiAcceptThread.DoAddListen;
var
i: Integer;
begin
FServers[FServerCount] := FAcceptEventServer;
// FListenSocket[High(FServers)].FContext:=FAcceptEventSocketContext;
for i := 1 to FAcceptEventServer.FParam.InitAcceptNum - 1 do
FOwner.PostNewAcceptEx(FServers[FServerCount].FListenSocket, FAiFamily);
FAcceptEvents[FServerCount] := WSACreateEvent;
// 绑定监听端口的ACCEPT事件,当没有足够的Accept套接字时就会触发该事件
WSAEventSelect(FAcceptEventServer.FListenSocket, FAcceptEvents[FServerCount], FD_ACCEPT);
Inc(FServerCount);
FAcceptEvents[FServerCount] := FAcceptEvent;
FAcceptEventLocker.Leave;
end;
procedure TIocpMultiAcceptThread.DelListen(aServer: TTcpConnectionServer);
begin
FAcceptEventLocker.Enter;
FAcceptEventType := etDel;
FAcceptEventServer := aServer;
SetEvent(FAcceptEvent);
end;
procedure TIocpMultiAcceptThread.DoDelListen;
var
i: Integer;
begin
for i := 0 to FServerCount-1 do
begin
if FServers[i] = FAcceptEventServer then
begin
FOwner.CloseSocket(FAcceptEventServer.FListenSocket);
CloseHandle(FAcceptEvents[i]);
FServers[i].DoStop;
FServers[i].Free;
if i <> High(FServers) then
Move(FServers[i + 1], FServers[i], FServerCount - i);
Move(FAcceptEvents[i + 1], FAcceptEvents[i], FServerCount+1 - i);
Dec(FServerCount);
Break;
end;
end;
FAcceptEventLocker.Leave;
end;
Original comment by [email protected]
on 27 May 2013 at 2:46
from delphi-iocp-framework.
你的程序在添加Listen或删除Listen可能会存在问题,因为
dwRet := WSAWaitForMultipleEvents(FServerCount+1, @FAcceptEvents[0], False, INFINITE, True);
并没有及时把新的Listen加入Wait或者没有及时把删除Listen的Even
t从FAcceptEvents删除,
我的程序不会有这个问题,请参考我的程序.
Original comment by [email protected]
on 27 May 2013 at 2:52
from delphi-iocp-framework.
[deleted comment]
from delphi-iocp-framework.
1、等空余时间多一点,这个我会考虑
2、你更新最新的代码看看,应该没这个问题
Original comment by [email protected]
on 31 May 2013 at 1:37
from delphi-iocp-framework.
在IOAcceptThread中,Quit和New Listen
事件可以用一个Event,这样一个线程可以多侦听一个端口,另
外IoAcceptThread的Reset和AddListen仍然可能存在被多个线程同时访�
��,导致数据错误。
你可以参考看一下上面我的程序中的AddListen,DelListen等实现��
�式。
Original comment by [email protected]
on 1 Jun 2013 at 1:30
from delphi-iocp-framework.
Related Issues (20)
- A Bug? HOT 1
- TIocpTcpSocket in DLL
- a bit performance increasing
- Resource Leak
- DeleteTimerQueueEx
- Problem on Win64
- This is my Iocp.Logger.pas
- No commenta in the SVN commits
- How clients access to IocpHttpServer access to data sets (TClientDataSet)
- 关于TSimpleIocpTcpServer的问题
- English translation of UI and internal messages HOT 2
- 希望作者继续更新,支持XE6以上,谢谢!
- SVN下载不了
- Please, English translation. HOT 1
- About Timer causes memory access exception,when the socket closed. HOT 3
- a Problem about Tag HOT 1
- About Timer HOT 3
- This is My Iocp.TimerQueue HOT 1
- About Server HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from delphi-iocp-framework.