\r
interface\r
\r
+procedure lcoreinit;\r
\r
implementation\r
-uses wcore,lcore,bsearchtree,sysutils,windows,winsock,pgtypes,messages,classes,lsocket;\r
+\r
+uses\r
+ dnswin, //to call init\r
+ wcore,lcore,bsearchtree,sysutils,windows,winsock,pgtypes,messages,classes,lsocket;\r
+\r
type\r
twineventcore=class(teventcore)\r
public\r
end else begin\r
if (event and (FD_READ or FD_ACCEPT)) <> 0 then readtrigger := true;\r
if (event and (FD_WRITE)) <> 0 then writetrigger := true;\r
- \r
+\r
if readtrigger or writetrigger then lasio.handlefdtrigger(readtrigger,writetrigger);\r
end;\r
// don't reset the event manually for listen sockets to avoid unwanted\r
- // extra onsessionavailible events\r
- if (taddrint(findtree(@fdwatches,inttostr(socket))) and FD_ACCEPT) = 0 then dowsaasyncselect(socket,0,0); // if not a listen socket reset watches\r
+ // extra onsessionavailable events\r
+ if (taddrint(findtree(@fdwatches,inttostr(socket))) and (FD_ACCEPT)) = 0 then dowsaasyncselect(socket,0,0); // if not a listen socket reset watches\r
end;\r
end else if (ahwnd=hwndlcore) and (aumsg=wm_dotasks) then begin\r
//writeln('processing tasks');\r
procedure winaddtask(ahandler:ttaskevent;aobj:tobject;awparam,alparam:longint);\r
begin\r
if not tasksoutstanding then PostMessage(hwndlcore,wm_dotasks,0,0);\r
+ tasksoutstanding := true;\r
end;\r
type\r
twcoretimer = wcore.tltimer;\r
lpszClassName : 'lcoreClass');\r
GInitData: TWSAData;\r
\r
+var\r
+ inited:boolean;\r
+procedure lcoreinit;\r
begin\r
+ if (inited) then exit;\r
+\r
+ dnswin.init;\r
+\r
eventcore := twineventcore.create;\r
if Windows.RegisterClass(MyWindowClass) = 0 then halt;\r
//writeln('about to create lcore handle, hinstance=',hinstance);\r
onaddtask := winaddtask;\r
timerwrapperinterface := twintimerwrapperinterface.create(nil);\r
\r
- WSAStartup($200, GInitData);\r
- absoloutemaxs := maxlongint;\r
+ WSAStartup(2, GInitData);\r
+ absolutemaxs := maxlongint;\r
+\r
+ wcoreinit;\r
+\r
+ inited := true;\r
+end;\r
+\r
end.\r