From a166134cc5d228dd8abdf47dfd34ffcf20f657c8 Mon Sep 17 00:00:00 2001 From: ValKmjolnir Date: Mon, 6 Jun 2022 16:34:21 +0800 Subject: [PATCH] :rocket: add module/libsock.nas, preparing to add socket lib into this language. --- main.cpp | 8 ++------ module/libsock.nas | 37 +++++++++++++++++++++++++++++++++++++ module/makefile | 8 ++++++++ module/nasocket.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 module/libsock.nas create mode 100644 module/nasocket.cpp diff --git a/main.cpp b/main.cpp index 796bdfd..3da57ea 100644 --- a/main.cpp +++ b/main.cpp @@ -151,22 +151,18 @@ int main(int argc,const char* argv[]) {"--debug",VM_DEBUG},{"-dbg",VM_DEBUG} }; uint32_t cmd=0; - bool recog_file=false; std::string filename; std::vector vm_argv; for(int i=1;i +#pragma comment(lib,"ws2_32") + +class WSAmanager{ +private: + WSAData data; +public: + WSAmanager(){ + WSAStartup(0x1010,&data); + } + ~WSAmanager(){ + WSACleanup(); + } +}; + +static WSAmanager win; +#else +#include +#endif + +extern "C" nasal_ref nas_socket(std::vector& args,nasal_gc& gc){ + if(args.size()!=3) + return builtin_err("socket","invalid arguments"); + if(args[0].type!=vm_num || args[1].type!=vm_num || args[2].type!=vm_num) + return builtin_err("socket","\"af\", \"type\", \"protocol\" should be number"); + int sd=socket(args[0].num(),args[1].num(),args[2].num()); + return {vm_num,(double)sd}; +} + +extern "C" nasal_ref nas_closesocket(std::vector& args,nasal_gc& gc){ + if(args.size()!=1) + return builtin_err("closesocket","invalid arguments"); + if(args[0].type!=vm_num) + return builtin_err("closesocket","\"\" should be number"); +#ifdef _WIN32 + return {vm_num,(double)closesocket(args[0].num())}; +#else + return {vm_num,(double)close(args[0].num())}; +#endif +} \ No newline at end of file