Ensure the FastCGI process always receives a blocking socket
From version 0.2.3, the socket egg immediately places the sockets it creates into non-blocking mode. In previous versions it only used to do this during socket-connect and socket-accept. As these procedures were never called on the socket we create for the FastCGI process we always has a regular blocking socket in hand.
The FCGX_Accept_r() call expects a blocking socket. If the socket does not block then FCGX_Accept_r() returns a non-zero value and the FastCGI process exits.
Here we ensure that the socket is in blocking mode after we fork but before we exec the FastCGI binary. This means that the child process gets the blocking socket that it expects but the socket in the CHICKEN parent is as the socket egg created it.