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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).