From 74a82eaabab39c5ea15451653d8663f75032c14d Mon Sep 17 00:00:00 2001 From: Michael Dawson Date: Mon, 30 Jan 2023 15:52:09 -0500 Subject: [PATCH] wasi: add wasi sock_accept stub Refs: https://github.com/nodejs/uvwasi/pull/185 Add stub for sock_accept so that we have stubs for all of the sock methods in wasi_snapshot_preview1. Its a bit awkward as the method was added after the initial definitial of wasi_snapshot-preview1 but I think it should be semver minor at most to add the method. Depends on https://github.com/nodejs/uvwasi/pull/185 being landed in uvwasi first and an updated version of uvwasi that includes that being pulled into Node.js Signed-off-by: Michael Dawson PR-URL: https://github.com/nodejs/node/pull/46434 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig --- src/node_wasi.cc | 32 ++++++++++++++++++++++++++++++++ src/node_wasi.h | 1 + test/wasi/c/sock.c | 17 +++++++++++++++++ test/wasi/test-wasi.js | 1 + test/wasi/wasm/sock.wasm | Bin 0 -> 18999 bytes 5 files changed, 51 insertions(+) create mode 100644 test/wasi/c/sock.c create mode 100755 test/wasi/wasm/sock.wasm diff --git a/src/node_wasi.cc b/src/node_wasi.cc index 5bbf7d9871fd98..347b49e9adbe61 100644 --- a/src/node_wasi.cc +++ b/src/node_wasi.cc @@ -1503,6 +1503,37 @@ void WASI::SchedYield(const FunctionCallbackInfo& args) { args.GetReturnValue().Set(err); } +void WASI::SockAccept(const FunctionCallbackInfo& args) { + WASI* wasi; + uint32_t sock; + uint32_t flags; + uint32_t fd_ptr; + char* memory; + size_t mem_size; + RETURN_IF_BAD_ARG_COUNT(args, 3); + CHECK_TO_TYPE_OR_RETURN(args, args[0], Uint32, sock); + CHECK_TO_TYPE_OR_RETURN(args, args[1], Uint32, flags); + CHECK_TO_TYPE_OR_RETURN(args, args[2], Uint32, fd_ptr); + ASSIGN_INITIALIZED_OR_RETURN_UNWRAP(&wasi, args.This()); + Debug(wasi, + "sock_accept(%d, %d, %d)\n", + sock, + flags, + fd_ptr); + GET_BACKING_STORE_OR_RETURN(wasi, args, &memory, &mem_size); + CHECK_BOUNDS_OR_RETURN(args, mem_size, fd_ptr, UVWASI_SERDES_SIZE_fd_t); + + uvwasi_fd_t fd; + uvwasi_errno_t err = uvwasi_sock_accept(&wasi->uvw_, + sock, + flags, + &fd); + + if (err == UVWASI_ESUCCESS) + uvwasi_serdes_write_size_t(memory, fd_ptr, fd); + + args.GetReturnValue().Set(err); +} void WASI::SockRecv(const FunctionCallbackInfo& args) { WASI* wasi; @@ -1720,6 +1751,7 @@ static void Initialize(Local target, SetProtoMethod(isolate, tmpl, "proc_raise", WASI::ProcRaise); SetProtoMethod(isolate, tmpl, "random_get", WASI::RandomGet); SetProtoMethod(isolate, tmpl, "sched_yield", WASI::SchedYield); + SetProtoMethod(isolate, tmpl, "sock_accept", WASI::SockAccept); SetProtoMethod(isolate, tmpl, "sock_recv", WASI::SockRecv); SetProtoMethod(isolate, tmpl, "sock_send", WASI::SockSend); SetProtoMethod(isolate, tmpl, "sock_shutdown", WASI::SockShutdown); diff --git a/src/node_wasi.h b/src/node_wasi.h index b3814ddc31033a..8345dd979777e2 100644 --- a/src/node_wasi.h +++ b/src/node_wasi.h @@ -71,6 +71,7 @@ class WASI : public BaseObject, static void ProcRaise(const v8::FunctionCallbackInfo& args); static void RandomGet(const v8::FunctionCallbackInfo& args); static void SchedYield(const v8::FunctionCallbackInfo& args); + static void SockAccept(const v8::FunctionCallbackInfo& args); static void SockRecv(const v8::FunctionCallbackInfo& args); static void SockSend(const v8::FunctionCallbackInfo& args); static void SockShutdown(const v8::FunctionCallbackInfo& args); diff --git a/test/wasi/c/sock.c b/test/wasi/c/sock.c new file mode 100644 index 00000000000000..de4a3ccc5f95a6 --- /dev/null +++ b/test/wasi/c/sock.c @@ -0,0 +1,17 @@ +#include +#include +#include +#include +#include + +// TODO(mhdawson): Update once sock_accept is implemented in uvwasi +int main(void) { + int fd = 0 ; + socklen_t addrlen = 0; + int flags = 0; + int ret = accept(0, NULL, &addrlen); + assert(ret == -1); + assert(errno == ENOTSUP); + + return 0; +} diff --git a/test/wasi/test-wasi.js b/test/wasi/test-wasi.js index 949fc77e97a7a3..9c1451b93e0ccc 100644 --- a/test/wasi/test-wasi.js +++ b/test/wasi/test-wasi.js @@ -92,6 +92,7 @@ if (process.argv[2] === 'wasi-child') { stdout: `hello from input.txt${checkoutEOL}hello from input.txt${checkoutEOL}`, }); runWASI({ test: 'stat' }); + runWASI({ test: 'sock' }); runWASI({ test: 'write_file' }); // Tests that are currently unsupported on Windows. diff --git a/test/wasi/wasm/sock.wasm b/test/wasi/wasm/sock.wasm new file mode 100755 index 0000000000000000000000000000000000000000..78e7b8e430f91141c4d2305da27a6dbc367f5437 GIT binary patch literal 18999 zcmc(H3vgW5dEUAA?i0I9EV0BWGLxj!W~_12jN5Uh?o1|~&a@r(m2{@= zjM8a4o=H;n`~GwH0Rps?Mz#rJ@44sx=Rg1Z|IfK+p~{_gM=9m}$e|a!ot+(L2bWtr z&aD?5wj*fUt9|C|s23Fe%OiBD7hHKBMLQhKPJ4@oFYP!lxnFdmh3n-`ZMoAdZ*;D; zy2~5w>UOPq{o%yw%5tUA>Qt3`4~RG*I@Ri$^6mjZ6xZ9eZdFC@0g>Ejw<^ok8?~;w z7agfitFpFSu2iZUU8TJF2V$|f>qVkU#bU7pq~oZFn^YsIbWFu#uInn5RBkevRGCQB z*>EC}sOKm*mVnUAH-0ISis#(edUd_kzUivia;IBvcU3Hzbd+&Y-fS*E@^7~va8>FF z$Jueux#x^J;eO(mc6U`q8GxL!H`yQEMOXI6`RS|d&+@8O#u-g1mC`EvQ|wTw-*cV& zc8;MZCuSb{N40 zG$?cX7ctm;^C$4BBiTbAIR1}b)EPS1EEMY%$y8(q&$HOys8+W4dJjo4!7WK#JGM$XoG_5L6pzVKyGgK z=Y$exDT5Jy%%fhMkbK{vir_d}omZ#5EEvErWpvx>z+KAF%VHy7d75gdymTLzRirS`e>uaLlAl1o!nI#sNyl*VvteS4K&4NMI7WNI+XXDxb`# z6v6<>I6<~R85tkvg`E!qc~-kVg*dPYC$+Li`JwEr4Pu~c?l_wmkf>*&?7m*iAHewV z@at-+6l&=F4)`SUIWMtqlEXsR86wPnf_PH@&2gd<>}bT4c-!> zCOiPwR{$9CqtpNzbw9@E_>Fq!fH9(@^$@@X)s#R~$6$g33D{YpbxHuX;fUHnfjn4JEppS#_%3E z5Xi4ephsl0tyA_9Sj8j?#`aXnI9+r59{|4okfY42h!v`?9ng~f9F>ro1y+RLf6N;n zu?9n7F9zlWJ^eg;pDd+5<~d$3UVH-{6&gJa?Ueg<8p>^_ZgicV4e^`bar(_K^_zV7 z>wx9;Hm)4|HHR7@n;7*qr;g8WfIh*OMabNRkwZ}kW=a$V@1{-AJs&j+aS?n*%m z6rq>XQ0xOUn6fj209FYn`gG6^Fr|%xkhqSPh)u>SSee6!h;9@Yn4sjt*&r3C9%dPp z`qomkwBz1#UP_=k4Aan?F~qqLB5HnL)sYxz(!lYis;~KRG`{sh9hFJcoMvSbrJ&8N z4hj?tpQ`&bboM6NemZO>+kVDuTaYyrDi(I6j(R0(&eTz_DE}~i$MBo8^7qbZ#~(*& zGKQpo=T5wH8NPtKIxCvHfAsi*QbCRa9QPf%9)EO>QPg(l%<(5PFh)O*-<&vSZb3Qb zII~R7riwgWEU(e;`Y4JFvJzl*L4eXO!aRnjP$`YC1p~T*{N)Ua2hCbRE6@RPlMWE8 zvTzxMsFcoSSUCWF4%RUNXy-xY1V!^~Jt&yuQ-F6ctC^+0I>rMWAv_dcEaVFQ1mn&m z#ud#ApvoM@5aVd4i}p|a>&PbO&JllsaFm^%Y@=)|1i1$xnQ)YThBCBZLxY*Y1oZ=$ z-U<%Xkv7NDMu}M35WkJvt(y_1#vBQSpa|@BwO2R0FW2c?Q>2=nb~qCY=c9lm^is`J z=@>&l!ZzZMi6Cr&Yda8jkkV7k_Q)c7YK>*5*?mKSnRJ9gm=a1YZBLVHzYsnUrB0cz zfATl~L{U6Dz%$Ya3djf$Mt$W=9xrrBT}Ye&2?0QzU;(oG z0MY{B^#F?d0I~uQ=>h0{0OJA>?E#$F2Y@mSM8=OP7C z5?1|bnE_#|fE62-XykR;z^-ANkSCmlaRs5${OC^IEYaR2EHShe%-KfW+>tB~X#xfy zC_#ET5l&E&Xn7&yfrAMt`Jkc+Mg*NB�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 Nb#<$;wqT3w{|6>jPuu_i literal 0 HcmV?d00001