On Sat, Sep 8, 2012 at 12:51 PM, Shripad K <[email protected]>wrote:
> > > On Fri, Sep 7, 2012 at 7:05 PM, Mark Volkmann > <[email protected]>wrote: > >> I don't doubt you. I just want to see that documented somewhere or >> clearly see how that is enforced in the code. I have looked at net.js. It's >> not the easiest code to follow. If it's clear from that code, I could use >> some pointers on where to look. >> >> I'll try to make my concern more clear below with very simple code for >> server.js and client.js that really runs. Run "node server" in one window >> and "node client" in another. >> The numbered comments indicate the order in which I expect the lines to >> execute. >> It seems clear to me that 4 could run before 5. If that happens, how is >> it that the server still gets that message? Is the message being buffered >> until connListener completes? >> >> > 4 always runs before 5. The data event cannot be triggered unless > something is written to the socket. This is provided the server.js file is > run first and then client.js. The other way round will not work as it will > throw a ECONNREFUSED on connect() at line 3 (provided the server has not > done a listen() yet). > > Here is the flow: > Behind the scenes, the event loop is notified of a new connection. It > accept()'s the connection. Once accept()ed the connListener callback is > Oops. Should be, the server is notified of a new connection via the event loop. The server accept()'s the connection.... > triggered and the particular socket (wrapper to the raw socket) is passed > as an argument. Listeners for various events (such as "data", "end", > "chunk" etc) are setup. Then, a read event handler is registered on the raw > socket's FD (UV_READ). When the file descriptor becomes readable, the data > is recv()d and is stored in a buffer and "chunk" event is emitted for each > data received (recv() returns the size of the data and "errno" is EAGAIN > until all data is read into the buffer). When the buffer is full (recv() > returns a -1), the "data" event is emitted with the buffer as argument. If > recv() returns 0, the socket is deemed to have closed on the other end. The > read event handler is then stopped, a full shutdown of the raw socket is > performed and the file descriptor is detached from the event loop with the > "end" event being emitted. (i have simplified it a lot. this is how its > generally done). > > >> server.js >> >> var net = require('net'); >> function dataListener(data) { >> console.log('received', data.toString()); >> } >> function connListener(socket) { >> socket.on('data', dataListener); // 5 >> } >> var server = net.createServer(connListener); // 1 >> server.listen(8019); // 2 >> >> client.js >> >> var net = require('net'); >> var socket = net.connect(8019); // 3 >> socket.write('Is this lost?'); // 4 >> >> On Fri, Sep 7, 2012 at 7:29 AM, ribao wei <[email protected]> wrote: >> >>> It is not about node.js, it is a Javascript thing. >>> >>> Socket will not receive any data util it "connect". >>> >>> >>> On Thu, Sep 6, 2012 at 11:35 PM, Hsu Ping Feng >>> <[email protected]>wrote: >>> >>>> https://github.com/joyent/node/blob/master/lib/net.js >>>> >>>> It is a good way to understand through source code. >>>> >>>> >>>> 2012/9/7 Mark Volkmann <[email protected]> >>>> >>>>> On Thu, Sep 6, 2012 at 4:40 PM, Jorge <[email protected]> wrote: >>>>> >>>>>> On 06/09/2012, at 23:11, Mark Volkmann wrote: >>>>>> >>>>> >>>>> >>>>>> My understanding is that node won't/shouldn't emit/dispatch any >>>>>> 'data' events to the socket 'socket' until *after* having called >>>>>> cb(socket), 'cb' being the callback function passed on to >>>>>> .createServer(cb). >>>>>> >>>>> >>>>> I suspect you are correct. I'd like to understand how Node implements >>>>> that. It would be great if this is already documented somewhere and I >>>>> could >>>>> just read that to understand it. >>>>> >>>> >> -- >> R. Mark Volkmann >> Object Computing, Inc. >> >> -- >> Job Board: http://jobs.nodejs.org/ >> Posting guidelines: >> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines >> You received this message because you are subscribed to the Google >> Groups "nodejs" group. >> To post to this group, send email to [email protected] >> To unsubscribe from this group, send email to >> [email protected] >> For more options, visit this group at >> http://groups.google.com/group/nodejs?hl=en?hl=en >> > > -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en
