From: Chris Friesen <chris.friesen@windriver.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: <netdev@vger.kernel.org>
Subject: Re: weird behaviour, getting EAGAIN on a connect() call on a unix stream socket
Date: Sat, 2 Aug 2014 08:11:43 -0600 [thread overview]
Message-ID: <53DCF19F.5030002@windriver.com> (raw)
In-Reply-To: <1406960889.3178.60.camel@edumazet-glaptop2.roam.corp.google.com>
On 08/02/2014 12:28 AM, Eric Dumazet wrote:
> On Fri, 2014-08-01 at 21:51 -0600, Chris Friesen wrote:
>> I've got an app that tries to connect() to both of them in turn. The connect()
>> to the first socket fails with EAGAIN, the second one succeeds, and all
>> subsequent retries on the first fail. Here's an strace() of the sequence:
>>
>> socket(PF_FILE, SOCK_STREAM, 0) = 6
>> fcntl(6, F_GETFL) = 0x2 (flags O_RDWR)
>> fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0
>
> Non blocking socket : If listener queue is full, -EAGAIN is expected
That doesn't make any sense though, there is only one process that ever
attempts to connect() to this socket, and I only ran it one instance at
a time. That implies that the first time I got EAGAIN the queue would
have been empty when the connection request came in.
>> With the app not running, netstat seems to show that something is trying to
>> connect to the socket in question:
>>
>> root@compute-0:~# netstat -ap unix |grep messaging
>> unix 2 [ ACC ] STREAM LISTENING 1109818 17379/qemu-system-x /var/lib/libvirt/qemu/cgcs.messaging.instance-00000007.sock
>> unix 2 [ ACC ] STREAM LISTENING 1110051 17425/qemu-system-x /var/lib/libvirt/qemu/cgcs.messaging.instance-00000008.sock
>> unix 2 [ ] STREAM CONNECTING 0 - /var/lib/libvirt/qemu/cgcs.messaging.instance-00000007.sock
>> unix 2 [ ] STREAM CONNECTING 0 - /var/lib/libvirt/qemu/cgcs.messaging.instance-00000007.sock
>> unix 2 [ ] STREAM CONNECTED 1109848 17379/qemu-system-x /var/lib/libvirt/qemu/cgcs.messaging.instance-00000007.sock
>>
>>
>> Here's /proc/net/unix for completeness:
>>
>> root@compute-0:~/host-guest-comm# grep -a messaging /proc/net/unix
>> ffff880045c35540: 00000002 00000000 00010000 0001 01 1109818 /var/lib/libvirt/qemu/cgcs.messaging.instance-00000007.sock
>> ffff8800576b8a80: 00000002 00000000 00010000 0001 01 1110051 /var/lib/libvirt/qemu/cgcs.messaging.instance-00000008.sock
>> ffff880045e2f040: 00000002 00000000 00000000 0001 02 0 /var/lib/libvirt/qemu/cgcs.messaging.instance-00000007.sock
>> ffff88004bc5ea80: 00000002 00000000 00000000 0001 02 0 /var/lib/libvirt/qemu/cgcs.messaging.instance-00000007.sock
>> ffff880045e2f540: 00000002 00000000 00000000 0001 03 1109848 /var/lib/libvirt/qemu/cgcs.messaging.instance-00000007.sock
>>
>>
>>
>> The crazy thing is that I can't figure out what could be causing the
>> CONNECTED/CONNECTING sockets. There are no background processes of the
>> connecting app running, no zombie processes, no forked children, etc.
>>
>> Just to make things more interesting, I successfully ran this application
>> several times (connecting to both sockets) before this behaviour started
>> happening. I was running it under strace and just killed it with ctrl-C.
>>
>> Anyone got any ideas? Please CC me since I'm not subscribed to the list.
>
> The application might use a too small listen() backlog ?
Looking at the qemu code I think it's calling listen(sock,1) which makes
sense since I think it's only designed to allow a single connection up
into the guest at a time.
Not sure how that could be the problem though, since there is only one
process that tries to connect() to the application, and I only ran it
one instance at a time.
I'll give the patch a try, but how would that explain the sockets that
are in a CONNECTING state when as far as I can tell they don't belong to
any process?
Am I correct to think that the CONNECTED socket may be due to the two
CONNECTING ones somehow?
Chris
next prev parent reply other threads:[~2014-08-02 14:11 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-02 3:51 weird behaviour, getting EAGAIN on a connect() call on a unix stream socket Chris Friesen
2014-08-02 6:28 ` Eric Dumazet
2014-08-02 14:11 ` Chris Friesen [this message]
2014-08-03 6:14 ` Eric Dumazet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53DCF19F.5030002@windriver.com \
--to=chris.friesen@windriver.com \
--cc=eric.dumazet@gmail.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.