Browse Source

Support eof in net_uv

v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
312ed83827
  1. 39
      lib/net_uv.js

39
lib/net_uv.js

@ -100,22 +100,35 @@ function onread(buffer, offset, length) {
var end = offset + length;
// Emit 'data' event.
if (buffer) {
// Emit 'data' event.
if (self._decoder) {
// Emit a string.
var string = self._decoder.write(buffer.slice(offset, end));
if (string.length) self.emit('data', string);
} else {
// Emit a slice. Attempt to avoid slicing the buffer if no one is
// listening for 'data'.
if (self._events && self._events['data']) {
self.emit('data', buffer.slice(offset, end));
if (self._decoder) {
// Emit a string.
var string = self._decoder.write(buffer.slice(offset, end));
if (string.length) self.emit('data', string);
} else {
// Emit a slice. Attempt to avoid slicing the buffer if no one is
// listening for 'data'.
if (self._events && self._events['data']) {
self.emit('data', buffer.slice(offset, end));
}
}
}
// Optimization: emit the original buffer with end points
if (self.ondata) self.ondata(buffer, offset, end);
// Optimization: emit the original buffer with end points
if (self.ondata) self.ondata(buffer, offset, end);
} else {
// EOF
self.readable = false;
if (!self.writable) self.destroy();
// Note: 'close' not emitted until nextTick.
if (!self.allowHalfOpen) self.end();
if (self._events && self._events['end']) self.emit('end');
if (self.onend) self.onend();
}
}

Loading…
Cancel
Save