Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Mar 2008 14:30:10 +0200
From:      "Vlad GALU" <dudu@dudu.ro>
To:        freebsd-hackers@freebsd.org
Subject:   Re: A (perhaps silly) kqueue question
Message-ID:  <ad79ad6b0803140530td3376b8v9307628ed147a89d@mail.gmail.com>
In-Reply-To: <ad79ad6b0803080009w45fc866euf43ea7e9dbf6b5f5@mail.gmail.com>
References:  <ad79ad6b0803070847v7464381en958ef73455ed9c89@mail.gmail.com> <20080307223723.X42870@fledge.watson.org> <ad79ad6b0803080009w45fc866euf43ea7e9dbf6b5f5@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 3/8/08, Vlad GALU <dudu@dudu.ro> wrote:
> On 3/8/08, Robert Watson <rwatson@freebsd.org> wrote:
>  > On Fri, 7 Mar 2008, Vlad GALU wrote:
>  >
>  >
>  > > I see an unusual symptom with one of our in-house applications. The main I/O
>  >  > loop calls kevent(), which in turn returns two events with EV_EOF error set,
>  >  > always for the same descriptors (they're both socket descriptors). As the
>  >  > man page is not pretty clear about it and I don't have my UNP copy at hand,
>  >  > I would like to ask the list whether the error events are supposed to be
>  >  > one-shot or not.
>  >
>  >
>  > I wonder if it's returning one event for the read socket buffer, and one event
>  >  for the write socket buffer, since there are really two event sources for each
>  >  socket?  Not that this is desirable behavior, but it might explain it.  If you
>  >  shutdown() only read, do you get back one EOF kevent and one writable kevent?
>
>
>    I'll try that and see. The only issue being the low frequency this
>  symptom appears at. I'll get back to the list once I have more info.

    Haven't gotten to the point of testing shutdown() behavior, but
here's a truss excerpt of the symptom:

-- cut here --
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
kevent(3,0x0,0,{0x7,EVFILT_WRITE,EV_EOF,54,0x832c,0x800d08080
0x7,EVFILT_READ,EV_EOF,54,0x2a,0x800d08080},1024,0x0) = 2 (0x2)
-- and here --

   So two EOF are returrned for descriptor 7, and errno would be
ECONNRESET. The question is now, why isn't it oneshot?

>
>
>  >
>  >  Robert N M Watson
>  >  Computer Laboratory
>  >  University of Cambridge
>  >
>
>
>
> --
>  Mahnahmahnah!
>


-- 
Mahnahmahnah!



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ad79ad6b0803140530td3376b8v9307628ed147a89d>