[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) |
Hi!
On Tue, 17 May 2005 10:31:09 +0100, "Neal H. Walfield" <neal@walfield.org>
wrote:
> 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.
Grüße,
Thomas
pgpIIdSmbD26m.pgp
Description: PGP signature
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: non-blocking connect fails with no pending acceptors,
Thomas Schwinge <=