Fix timing out not working properly

This commit is contained in:
UnknownShadow200 2021-05-23 15:38:34 +10:00
parent 355f35c719
commit cef1e5b484
2 changed files with 27 additions and 27 deletions

View File

@ -127,7 +127,7 @@ NOTE: You have to change entry->d_type == DT_DIR to Directory_Exists(&path) (TOD
#### Web #### Web
```emcc *.c -s ALLOW_MEMORY_GROWTH=1 --preload-file texpacks/default.zip``` ```emcc *.c -s ALLOW_MEMORY_GROWTH=1 --js-library interop_web.js --preload-file texpacks/default.zip```
The generated javascript file has some issues. [See here for how to fix](doc/compile-fixes.md#webclient-patches) The generated javascript file has some issues. [See here for how to fix](doc/compile-fixes.md#webclient-patches)

View File

@ -134,19 +134,19 @@ mergeInto(LibraryManager.library, {
recv_queue: [], recv_queue: [],
socket: null, socket: null,
}; };
this.sockets.push(sock); SOCKETS.sockets.push(sock);
return (this.sockets.length - 1) | 0; return (SOCKETS.sockets.length - 1) | 0;
}, },
connect:function(fd, addr, port) { connect:function(fd, addr, port) {
var sock = this.sockets[fd]; var sock = SOCKETS.sockets[fd];
if (!sock) return this.EBADF; if (!sock) return SOCKETS.EBADF;
// early out if we're already connected / in the middle of connecting // early out if we're already connected / in the middle of connecting
var ws = sock.socket; var ws = sock.socket;
if (ws) { if (ws) {
if (ws.readyState === ws.CONNECTING) return this.EALREADY; if (ws.readyState === ws.CONNECTING) return SOCKETS.EALREADY;
return this.EISCONN; return SOCKETS.EISCONN;
} }
// create the actual websocket object and connect // create the actual websocket object and connect
@ -156,7 +156,7 @@ mergeInto(LibraryManager.library, {
ws = new WebSocket(url, 'ClassiCube'); ws = new WebSocket(url, 'ClassiCube');
ws.binaryType = 'arraybuffer'; ws.binaryType = 'arraybuffer';
} catch (e) { } catch (e) {
return this.EHOSTUNREACH; return SOCKETS.EHOSTUNREACH;
} }
sock.socket = ws; sock.socket = ws;
@ -183,14 +183,14 @@ mergeInto(LibraryManager.library, {
ws.onerror = function(error) { ws.onerror = function(error) {
// The WebSocket spec only allows a 'simple event' to be thrown on error, // The WebSocket spec only allows a 'simple event' to be thrown on error,
// so we only really know as much as ECONNREFUSED. // so we only really know as much as ECONNREFUSED.
sock.error = -this.ECONNREFUSED; // Used in getsockopt for SOL_SOCKET/SO_ERROR test. sock.error = -SOCKETS.ECONNREFUSED; // Used in getsockopt for SOL_SOCKET/SO_ERROR test.
}; };
// always "fail" in non-blocking mode // always "fail" in non-blocking mode
return this.EINPROGRESS; return SOCKETS.EINPROGRESS;
}, },
poll:function(fd) { poll:function(fd) {
var sock = this.sockets[fd]; var sock = SOCKETS.sockets[fd];
if (!sock) return this.EBADF; if (!sock) return SOCKETS.EBADF;
var ws = sock.socket; var ws = sock.socket;
if (!ws) return 0; if (!ws) return 0;
@ -201,20 +201,20 @@ mergeInto(LibraryManager.library, {
return mask; return mask;
}, },
getPending:function(fd) { getPending:function(fd) {
var sock = this.sockets[fd]; var sock = SOCKETS.sockets[fd];
if (!sock) return this.EBADF; if (!sock) return SOCKETS.EBADF;
return sock.recv_queue.length; return sock.recv_queue.length;
}, },
getError:function(fd) { getError:function(fd) {
var sock = this.sockets[fd]; var sock = SOCKETS.sockets[fd];
if (!sock) return this.EBADF; if (!sock) return SOCKETS.EBADF;
return sock.error || 0; return sock.error || 0;
}, },
close:function(fd) { close:function(fd) {
var sock = this.sockets[fd]; var sock = SOCKETS.sockets[fd];
if (!sock) return this.EBADF; if (!sock) return SOCKETS.EBADF;
try { try {
sock.socket.close(); sock.socket.close();
@ -224,14 +224,14 @@ mergeInto(LibraryManager.library, {
return 0; return 0;
}, },
send:function(fd, src, length) { send:function(fd, src, length) {
var sock = this.sockets[fd]; var sock = SOCKETS.sockets[fd];
if (!sock) return this.EBADF; if (!sock) return SOCKETS.EBADF;
var ws = sock.socket; var ws = sock.socket;
if (!ws || ws.readyState === ws.CLOSING || ws.readyState === ws.CLOSED) { if (!ws || ws.readyState === ws.CLOSING || ws.readyState === ws.CLOSED) {
return this.ENOTCONN; return SOCKETS.ENOTCONN;
} else if (ws.readyState === ws.CONNECTING) { } else if (ws.readyState === ws.CONNECTING) {
return this.EAGAIN; return SOCKETS.EAGAIN;
} }
var data = HEAP8.slice(src, src + length); var data = HEAP8.slice(src, src + length);
@ -239,22 +239,22 @@ mergeInto(LibraryManager.library, {
ws.send(data); ws.send(data);
return length; return length;
} catch (e) { } catch (e) {
return this.EINVAL; return SOCKETS.EINVAL;
} }
}, },
recv:function(fd, dst, length) { recv:function(fd, dst, length) {
var sock = this.sockets[fd]; var sock = SOCKETS.sockets[fd];
if (!sock) return this.EBADF; if (!sock) return SOCKETS.EBADF;
var packet = sock.recv_queue.shift(); var packet = sock.recv_queue.shift();
if (!packet) { if (!packet) {
var ws = sock.socket; var ws = sock.socket;
if (!ws || ws.readyState == ws.CLOSING || ws.readyState == ws.CLOSED) { if (!ws || ws.readyState == ws.CLOSING || ws.readyState == ws.CLOSED) {
return this.ENOTCONN; return SOCKETS.ENOTCONN;
} else { } else {
// socket is in a valid state but truly has nothing available // socket is in a valid state but truly has nothing available
return this.EAGAIN; return SOCKETS.EAGAIN;
} }
} }