emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

non-blocking socket io: data limit on read?


From: Nic Ferrier
Subject: non-blocking socket io: data limit on read?
Date: 01 Jul 2004 22:07:13 +0100

I have the beginnings of an nbio imap client. It sets up the socket
like this:

      (open-network-stream-nowait
            "nbimap"
            con-buffer
            server 143
            'nbimap-sentinel
            'nbimap-filter)

The sentinel doesn't do anything special, it just sets states based
on the connection status.

The filter parses the data passed into it, and then inserts it into
the buffer.

But I am getting some read problems. Large data sets don't arrive in
full. I get a truncated form of the data. The bit I'm recieving is the
last part, so it's not that my filter is being called twice.

As an example I'm issuing an IMAP list command:
 
  0x LIST "" "*"

which returns all my folders, here's what goes over the socket
(sniffed):

T 127.0.0.1:143 -> 127.0.0.1:48929 [AP]
* LIST (\HasNoChildren) "." "INBOX.clients.earthport"..* LIST (\HasNoChildren) 
"." "INBOX.gnu.gdb"..* LIS
T (\HasNoChildren) "." "INBOX.Spam.test"..* LIST (\HasNoChildren) "." 
"INBOX.exim"..* LIST (\HasNoChildre
n) "." "INBOX.Spam.clever"..* LIST (\HasNoChildren) "." "INBOX.servlets.jcp"..* 
LIST (\HasNoChildren) "."
 "INBOX.gnu.libxmlxsl"..* LIST (\HasNoChildren) "." "INBOX.gnu.scheme"..* LIST 
(\HasNoChildren) "." "INBO
X.lispweb"..* LIST (\HasNoChildren) "." "INBOX.linux"..* LIST (\HasNoChildren) 
"." "INBOX.nic.policematte
r"..* LIST (\HasNoChildren) "." "INBOX.clients.sweetandmaxwell.java-tips"..* 
LIST (\HasNoChildren) "." "I
NBOX.gnu.emacs.nics-tip-of-the-day"..* LIST (\HasNoChildren) "." 
"INBOX.schemeunderground"..* LIST (\HasN
oChildren) "." "INBOX.debian.laptop"..* LIST (\HasNoChildren) "." 
"INBOX.tf.net"..* LIST (\HasNoChildren)
 "." "INBOX.gnu.servletapi"..* LIST (\HasNoChildren) "." "INBOX.gnu.gcj"..* 
LIST (\HasNoChildren) "." "IN
BOX.imapua-broken"..* LIST (\HasNoChildren) "." "INBOX.xsl"..* LIST 
(\HasNoChildren) "." "INBOX.wikipedia
"..* LIST (\HasChildren) "." "INBOX.tf"..* LIST (\HasChildren) "." 
"INBOX.servlets"..* LIST (\HasNoChildr
en) "." "INBOX.nic.jobs"..* LIST (\HasNoChildren) "." "INBOX.rest"..* LIST 
(\HasNoChildren) "." "INBOX.po
stgresql"..* LIST (\HasNoChildren) "." "INBOX.oracle"..* LIST (\HasNoChildren) 
"." "INBOX.nic.egg"..* LIS
T (\HasChildren) "." "INBOX.nic"..* LIST (\HasChildren) "." "INBOX.Spam"..* 
LIST (\HasNoChildren) "." "IN
BOX.java"..* LIST (\HasNoChildren) "." "INBOX.gnu.paperclips"..* LIST 
(\HasNoChildren) "." "INBOX.gnu.mai
lutils"..* LIST (\HasNoChildren) "." "INBOX.gnu.jaxp"..* LIST (\HasNoChildren) 
"." "INBOX.gnu.javamail"..
* LIST (\HasNoChildren) "." "INBOX.gnu.java"..* LIST (\HasNoChildren) "." 
"INBOX.gnu.gjdoc"..* LIST (\Has
Children) "." "INBOX.gnu.emacs"..* LIST (\HasNoChildren) "." "INBOX.gnu.cvs"..* 
LIST (\HasNoChildren) "."
 "INBOX.gnu.classpathx-administrivia"..* LIST (\HasChildren) "." "INBOX.gnu"..* 
LIST (\HasNoChildren) "."
 "INBOX.ferrier_me_uk"..* LIST (\HasChildren) "." "INBOX.debian"..* LIST 
(\HasNoChildren) "." "INBOX.clie
nts.withyham"..* LIST (\HasChildren) "." "INBOX.clients.sweetandmaxwell"..* 
LIST (\HasChildren) "." "INBO
X.clients"..* LIST (\HasNoChildren) "." "INBOX.articles"..* LIST 
(\HasNoChildren) "." "INBOX.affs"..* LIS
T (\HasNoChildren) "." "INBOX.Trash"..* LIST (\HasNoChildren) "." 
"INBOX.Sent"..* LIST (\Marked \HasChild
ren) "." "INBOX"..02 OK LIST completed...                                       
                         

But what I get in the data argument to the filter function is this:

  "BOX.debian\"\n* LIST (\\HasNoChildren) \".\" \"INBOX.clients.withyham\"\n* 
LIST (\\HasChildren) \".\" \"INBOX.clients.sweetandmaxwell\"\n* LIST 
(\\HasChildren) \".\" \"INBOX.clients\"\n* LIST (\\HasNoChildren) \".\" 
\"INBOX.articles\"\n* LIST (\\HasNoChildren) \".\" \"INBOX.affs\"\n* LIST 
(\\HasNoChildren) \".\" \"INBOX.Trash\"\n* LIST (\\HasNoChildren) \".\" 
\"INBOX.Sent\"\n* LIST (\\Marked \\HasChildren) \".\" \"INBOX\"\n02 OK LIST 
completed.\n"

Clearly truncated.

My Emacs version is:

   GNU Emacs 21.3.50.2 (i686-pc-linux-gnu, X toolkit)


It's pretty complicated code (process.c) so I don't want to have to
get into it unless I need to   /8->

Has anyone got any ideas?


-- 
Nic Ferrier
http://www.tapsellferrier.co.uk





reply via email to

[Prev in Thread] Current Thread [Next in Thread]