So, in VM it work for me also.

I'm assuming that something on my windows work-pc has prevented to inherit listener in this way (driver, LSPs installed (Layered Service Providers), antivirus or something else)...


But, why don't you want to use a suggested solution of me?

If I will realize the way with "easy" inheritance (with "bInheritHandle" through CreateProcess), it will be not really easier, because:

- we have several listener to share, so we should tell all this handles to child process;

- bInheritHandle=True in CreateProcess can be a potential risk by not closed handles, if process crashed, and that are not only sockets - thus will arise so-called zombi-handles as half-open (dropped) or half-closed. But for sockets are listening it is extrem. Here is an example when this situation is encountered (* - listener, which process does not exist):

netstat /ano | grep 0.0:80
* TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 3824 TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4378

taskkill /F /PID 3824
ERROR: The process "3824" not found.

Unfortunately, it is not guaranteed that new process 4378 accepts connections (because "zombi" listener of 3824 can block it). But also not so good are another zombies, like not closed temp-files, lock-files, pipes etc.

You can talk long about "that would be windows bugs", but that are facts. And thus it is instable. Apart from, does not work at all on some mashines (like my work-pc). And the way with WSADuplicateSocket self Microsoft recommends in various articles.

If you still want to use the solution with "bInheritHandle", I suggest a compromise: I will make it with selectable option (resp. defines like NGX_WIN32_DUPLICATE_LISTEN and NGX_WIN32_INHERIT_LISTEN).

Please tell me your decision.

Regards,
sebres.



Am 17.06.2015 16:52, schrieb Maxim Dounin:

Hello!

On Wed, Jun 17, 2015 at 04:01:17PM +0200, Sergey Brester wrote:

Hmm, strange - almost same code, but it does not work... only first child can accept connections.

Have you tried exactly the code I provided? "Almost the same"
is a usual difference between working and non-working code.

Which version of windows are you using for test?

Works fine at least in Windows 7 and Windows 8.1 VMs here, both
32-bit. I have no 64-bit Windows on hand to test, but if it
doesn't work for you specifically on 64-bit Windows, this may be
some minor bug in the test code related to type casting.

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Reply via email to