aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-06-04 12:55:00 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-06-04 12:55:00 -0700
commit6c631b23af04ed010b4ebad30debb59463f47185 (patch)
tree61b6eea6b36c2089257640164602876953da019c
parent020c6b72916ddfc09170ab4de0e8f5d2793edcbe (diff)
leave low fds for sockets
-rw-r--r--src/library.js24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/library.js b/src/library.js
index 5608ea1e..65256a59 100644
--- a/src/library.js
+++ b/src/library.js
@@ -67,9 +67,21 @@ LibraryManager.library = {
if (typeof stream === 'undefined') {
stream = null;
}
- fd = (typeof fd !== 'undefined') ? fd : FS.streams.length;
- for (var i = FS.streams.length; i < fd; i++) {
- FS.streams[i] = null; // Keep dense
+ if (!fd) {
+ if (stream && stream.socket) {
+ for (var i = 1; i < 64; i++) {
+ if (!FS.streams[i]) {
+ fd = i;
+ break;
+ }
+ }
+ assert(fd, 'ran out of low fds for sockets');
+ } else {
+ fd = Math.max(FS.streams.length, 64);
+ for (var i = FS.streams.length; i < fd; i++) {
+ FS.streams[i] = null; // Keep dense
+ }
+ }
}
// Close WebSocket first if we are about to replace the fd (i.e. dup2)
if (FS.streams[fd] && FS.streams[fd].socket && FS.streams[fd].socket.close) {
@@ -7314,7 +7326,8 @@ LibraryManager.library = {
port: null,
inQueue: new CircularBuffer(INCOMING_QUEUE_LENGTH),
header: new Uint16Array(2),
- bound: false
+ bound: false,
+ socket: true
};
assert(fd < 64); // select() assumes socket fd values are in 0..63
var stream = type == {{{ cDefine('SOCK_STREAM') }}};
@@ -7680,7 +7693,8 @@ LibraryManager.library = {
}
var fd = FS.createFileHandle({
connected: false,
- stream: stream
+ stream: stream,
+ socket: true
});
assert(fd < 64); // select() assumes socket fd values are in 0..63
return fd;