dnswin init must be called from lcoreinit to support NT service
[lcore.git] / lcorewsaasyncselect.pas
index 712bd7fd4c466cac0f70c1802ef45fef81b9e75b..075d5587622d40177d71ec9bc23bceff58784716 100755 (executable)
@@ -2,9 +2,14 @@ unit lcorewsaasyncselect;
 \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
@@ -138,12 +143,12 @@ begin
       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
+      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
@@ -197,7 +202,14 @@ var
                                  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
@@ -216,6 +228,12 @@ begin
   onaddtask := winaddtask;\r
   timerwrapperinterface := twintimerwrapperinterface.create(nil);\r
 \r
-  WSAStartup($200, GInitData);\r
+  WSAStartup(2, GInitData);\r
   absoloutemaxs := maxlongint;\r
+\r
+  wcoreinit;\r
+\r
+  inited := true;\r
+end;\r
+\r
 end.\r