if (error <> 0) or ((event and FD_CLOSE) <> 0) then begin\r
readtrigger := false;\r
writetrigger := false;\r
lasio := findtree(@fdreverse,inttostr(socket));\r
if assigned(lasio) then begin\r
if (error <> 0) or ((event and FD_CLOSE) <> 0) then begin\r
- if lasio.state = wsconnecting then begin\r
- lasio.onsessionconnected(lasio,error);\r
+ if (lasio.state = wsconnecting) and (error <> 0) then begin\r
+ if lasio is tlsocket then tlsocket(lasio).connectionfailedhandler(error)\r
+ end else begin\r
+ lasio.internalclose(error);\r
end;\r
end;\r
- lasio.internalclose(error);\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
if readtrigger or writetrigger then lasio.handlefdtrigger(readtrigger,writetrigger);\r
end;\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
if readtrigger or writetrigger then lasio.handlefdtrigger(readtrigger,writetrigger);\r
end;\r
- dowsaasyncselect(socket,0,0); //reset watches\r
+ // don't reset the event manually for listen sockets to avoid unwanted\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
end;\r
end else if (ahwnd=hwndlcore) and (aumsg=wm_dotasks) then begin\r