[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: non-blocking connect fails with no pending acceptors

From: Thomas Schwinge
Subject: Re: non-blocking connect fails with no pending acceptors
Date: Thu, 26 Jul 2012 12:40:16 +0200
User-agent: Notmuch/0.9-101-g81dad07 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu)


On Tue, 17 May 2005 10:31:09 +0100, "Neal H. Walfield" <neal@walfield.org> 
> If a program calls connect on a non-blocking socket with no pending
> acceptors (i.e. threads calling accept on the listening end of a
> socket), connect fails with EWOULDBLOCK.  [...]

This patch has been used in Debian GNU/Hurd ever since, Richard has now
reviewed it, and I then pushed it as commit
d74fad98ca037a539de873a92c033d3d0364fca7.  Thanks!

> pflocal/
> 2005-05-17  Neal H. Walfield  <neal@gnu.org>
>       * connq.h (struct connq_request): Remove forward.
>       (connq_listen): Wait for a request to be queued not until there is
>       a connection attempt.  Remove REQ parameter.  Update callers.
>       (connq_request_complete): Remove declaration.
>       (connq_connect): Wait for a slot to queue a request not until
>       there is an acceptor.  Remove SOCK parameter.  Update callers.
>       (connq_connect_complete): New declaration.
>       (connq_connect_cancel): New declaration.
>       * connq.c (struct connq): Remove fields noqueue, queue, length,
>       head and tail.  Add fields head, tail, count, max, connectors and
>       num_connectors.  That is, replace the circular buffer with a
>       singly linked list.
>       (qnext): Remove function.
>       (struct connq_request): Remove field signal, lock, completed and
>       err.  Add field next.
>       (connq_request_init): Rewrite according to new semantics.
>       (connq_request_enqueue): New function.
>       (connq_request_dequeue): New function.
>       (connq_create): Update according to new semantics.
>       (connq_destroy): Likewise.
>       (connq_listen): Rewrite to not block until there is a connector
>       but until there is a request in the queue.
>       (connq_request_complete): Remove function.
>       (connq_connect): Rewrite to not block until there is an acceptor
>       but until there is space for a request.
>       (connq_connect_complete): New function.
>       (connq_connect_cancel): New function.
>       (connq_compress): Remove dead code.
>       (connq_set_length): Rewrite.
>       * socket.c (S_socket_connect): Create the server socket here...
>       (S_socket_accept): ... not here.


Attachment: pgpIIdSmbD26m.pgp
Description: PGP signature

reply via email to

[Prev in Thread] Current Thread [Next in Thread]