UNIX domain socket patch
Christopher Faylor
cgf@redhat.com
Sun Nov 3 20:29:00 GMT 2002
How about this patch? Did anyone ever look at it?
Corinna? Egor?
cgf
On Mon, Jul 29, 2002 at 06:47:29PM +0100, Conrad Scott wrote:
>And one more time with the patch attached as text rather than
>binary.
>
>This thread really should teach me something, I just wish I knew
>what :-(
>
>// Conrad
>
>2002-07-27 Conrad Scott <conrad.scott@dsl.pipex.com>
>
> * fhandler.h
> (fhandler_socket::connect_secret_initialized): New field.
> (fhandler_socket::peer_sun_path): Ditto.
> (fhandler_socket::set_peer_sun_path): New method.
> (fhandler_socket::get_peer_sun_path): Ditto.
> (fhandler_socket::set_connect_secret): Change return type to bool.
> (fhandler_socket::get_connect_secret): Ditto.
> (fhandler_socket::create_connect_secret): Ditto.
> (fhandler_socket::check_peer_secret_event): Ditto.
> (fhandler_socket::signal_secret_event): Remove method.
> * fhandler_socket.cc (ENTROPY_SOURCE_NAME): Remove #define.
> (get_inet_addr): Check that the UNIX domain sun_path refers to a
> socket file. Add the SOCKET_COOKIE string to the sscanf(3)
> format. Check the return value from sscanf(3) and set errno as
> appropriate. Add save_errno objects as appropriate.
> (fhandler_socket::fhandler_socket): Initialize every field.
> (fhandler_socket::~fhandler_socket): Call close_secret_event().
> Free peer_sun_path if required.
> (fhandler_socket::set_connect_secret): Change return type to bool.
> Add asserts. Use explicit destructor and free(3) rather than
> delete. Add tracing messages. Set connect_secret_initialized as
> appropriate. Return true if the connect_secret has been
> initialized.
> (fhandler_socket::get_connect_secret): Add asserts.
> (fhandler_socket::create_secret_event): Change return type to
> bool. Add asserts. Add AF_LOCAL marker to tracing statements.
> Change all tracing failure statements to syscall level. Set errno
> as appropriate. Change the secret_event to be a semaphore.
> (fhandler_socket::signal_secret_event): Remove method.
> (fhandler_socket::close_secret_event): Wait for the secret event
> (or an error) to be signalled before closing the event.
> (fhandler_socket::check_peer_secret_event): Change return type to
> bool. Add asserts. Add AF_LOCAL marker to tracing statements.
> Set errno as appropriate. Change all tracing failure statements
> to syscall level. Change to support new UNIX domain emulation
> protocol.
> (fhandler_socket::fixup_after_fork): Remove ineffective call to
> fork_fixup. Signal the secret_event to keep handle count and
> signal count in sync.
> (fhandler_socket::dup): Duplicate every field. In particular,
> explicitly duplicate the secret event handle and protect it.
> (fhandler_socket::bind): Check that the requested address family
> matches the socket's address family. Change tracing messages to
> use WSAGetLastError rather than errno. For UNIX domain sockets,
> create the secret event before creating the file system socket,
> then immediately signal that event.
> (fhandler_socket::connect): Remove the secret_check_failed and
> in_progress flags. Check that the requested address family
> matches the socket's address family. For the first connect on a
> UNIX domain socket, check the that the server's secret event
> exists; then bind the local socket and create its own secret
> event. Also set the peer sun path here. Remove the old secret
> event code. Rewrite code that generates the errno for
> non-blocking sockets to match SUSv3. Change the code that sets
> had_connect_or_listen likewise.
> (fhandler_socket::accept): Remove the secret_check_failed and
> in_progress flags. Remove the old secret event code. Check peer
> secret event and do a hard reset on the accepted socket if it
> fails. Duplicate the peer sun path and the had_connect_or_listen
> flag into the accepted fhandler.
> (fhandler_socket::getsockname): Call ::getsockname() even for UNIX
> domain sockets as an error check.
> (fhandler_socket::getpeername): Add special case for UNIX domain
> sockets as per the getsockname method.
> (fhandler_socket::close): Close the secret event before, rather
> than after, closing the underlying socket and return error status
> as appropriate.
> (fhandler_socket::set_sun_path): Add assert. Free the previous
> sun path as appropriate.
> (fhandler_socket::set_peer_sun_path): New method.
> * net.cc (cygwin_socket): Check for supported protocol families.
More information about the Cygwin-patches
mailing list