From cbb1bfdee2b37e98bd25f67190dbd22eb76f5cff Mon Sep 17 00:00:00 2001 From: Wassim Chegham Date: Tue, 12 Dec 2023 16:57:38 +0100 Subject: [PATCH] chore: add SOCKET_UDP_CHECK_SEND --- packages/preview2-shim/lib/io/calls.js | 1 + packages/preview2-shim/lib/io/worker-thread.js | 10 ++++++++++ .../lib/nodejs/sockets/udp-socket-impl.js | 15 +++++++-------- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/preview2-shim/lib/io/calls.js b/packages/preview2-shim/lib/io/calls.js index 1ba6711cd..873131ff1 100644 --- a/packages/preview2-shim/lib/io/calls.js +++ b/packages/preview2-shim/lib/io/calls.js @@ -54,6 +54,7 @@ export const SOCKET_UDP_CREATE_HANDLE = ++call_id << 24; export const SOCKET_UDP_BIND = ++call_id << 24; export const SOCKET_UDP_CONNECT = ++call_id << 24; export const SOCKET_UDP_DISCONNECT = ++call_id << 24; +export const SOCKET_UDP_CHECK_SEND = ++call_id << 24; export const SOCKET_UDP_SEND = ++call_id << 24; export const SOCKET_UDP_RECEIVE = ++call_id << 24; export const SOCKET_UDP_DISPOSE = ++call_id << 24; diff --git a/packages/preview2-shim/lib/io/worker-thread.js b/packages/preview2-shim/lib/io/worker-thread.js index 55487a205..da105c28a 100644 --- a/packages/preview2-shim/lib/io/worker-thread.js +++ b/packages/preview2-shim/lib/io/worker-thread.js @@ -45,6 +45,7 @@ import { SOCKET_RESOLVE_ADDRESS_DISPOSE_REQUEST, SOCKET_RESOLVE_ADDRESS_GET_AND_DISPOSE_REQUEST, SOCKET_UDP_BIND, + SOCKET_UDP_CHECK_SEND, SOCKET_UDP_CONNECT, SOCKET_UDP_CREATE_HANDLE, SOCKET_UDP_DISCONNECT, @@ -316,6 +317,15 @@ function handle(call, id, payload) { }); } + case SOCKET_UDP_CHECK_SEND: { + const socket = getSocketOrThrow(id); + try { + return socket.getSendBufferSize() - socket.getSendQueueSize(); + } catch (err) { + return err.errno; + } + } + case SOCKET_UDP_SEND: { let { remoteHost, remotePort, data } = payload; const socket = getSocketOrThrow(id); diff --git a/packages/preview2-shim/lib/nodejs/sockets/udp-socket-impl.js b/packages/preview2-shim/lib/nodejs/sockets/udp-socket-impl.js index 6c06896a6..6fb6db53d 100644 --- a/packages/preview2-shim/lib/nodejs/sockets/udp-socket-impl.js +++ b/packages/preview2-shim/lib/nodejs/sockets/udp-socket-impl.js @@ -10,6 +10,7 @@ import { isIP } from "node:net"; import { assert } from "../../common/assert.js"; import { SOCKET_UDP_BIND, + SOCKET_UDP_CHECK_SEND, SOCKET_UDP_CONNECT, SOCKET_UDP_CREATE_HANDLE, SOCKET_UDP_DISCONNECT, @@ -129,14 +130,13 @@ export class OutgoingDatagramStream { /** * * @returns {bigint} - * @throws {invalid-state} The socket is not bound to any local address. (EINVAL) */ checkSend() { - // TODO: implement the actual check - // socket.getSendBufferSize() - socket.getSendQueueSize() <= 0 --> throw - // attach an event listener to the socket to listen for the drain event - // untill the next sent completes - return 1024n; + const ret = ioCall(SOCKET_UDP_CHECK_SEND, this.#socketId); + // TODO: When this function returns ok(0), the `subscribe` pollable will + // become ready when this function will report at least ok(1), or an + // error. + return ret; } /** @@ -179,8 +179,7 @@ export class OutgoingDatagramStream { ); if (ret === 0) { datagramsSent++; - } - else { + } else { assert(ret === -65, "remote-unreachable"); } }