On Nov 20, 12:08 pm, oj <[EMAIL PROTECTED]> wrote:
> On Nov 19, 5:30 pm, Vinay Sajip <[EMAIL PROTECTED]> wrote:
>
>
>
> > On Nov 19, 10:27 am, oj <[EMAIL PROTECTED]> wrote:
>
> > > On Nov 16, 2:31 pm, Vinay Sajip <[EMAIL PROTECTED]> wrote:
>
> > > Here is the server code. Pretty much directly copied from the example,
> > > aside from not having the the handler loop forever, and queing the
> > > records instead of dealing with the directly.
>
> > > After further investigation, running the client with a long timeout,
> > > without the server, so that every connection will fail, produces
> > > results much closer to what I would expect. Connections attempted for
> > > each message initially, but not for all of the later messages as the
> > > retry time increases.
>
> > > The point is kinda moot now, since I guess not closing the connection
> > > is the 'right way' to do this, but I'm still interested in why I see
> > > this behaviour when the server closes the connection.
>
> > I've investigated this and the issue appears not to be related to
> > closing connections. Your server code differs from the example in the
> > docs in one crucial way: there is a while loop which you have left out
> > in the handle() function, which deals with multipleloggingevents
> > received in one packet. Add this back in, and all 9 events are
> > received.
>
> >     def handle(self):
> >         while 1:
> >             chunk = self.connection.recv(4)
>
> >             if len(chunk) < 4:
> >                 break
>
> >             slen = struct.unpack(">L", chunk)[0]
> >             chunk = self.connection.recv(slen)
>
> >             while len(chunk) < slen:
> >                 chunk = chunk + self.connection.recv(slen -
> > len(chunk))
>
> >             obj = self.unPickle(chunk)
> >             record =logging.makeLogRecord(obj)
> >             queue_lock.acquire()
> >             queue.insert(0, record)
> >             queue_lock.release()
>
> > So it appears that due to buffering, 3 socket events are sent in each
> > packet sent over the wire. You were only processing the first of each
> > set of three, viz. nos. 0, 3, 6 and 9. Mystery solved, it appears!
>
> > Regards,
>
> > Vinay Sajip
>
> I don't think buffering explains the behaviour I was seeing.

Can you confirm that if you add the while loop back in, all messages
are seen by the server? It worked for me.

Vinay Sajip
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to