diff --git a/spec/srt_spec.js b/spec/srt_spec.js index d577434..e2a26c6 100644 --- a/spec/srt_spec.js +++ b/spec/srt_spec.js @@ -26,4 +26,13 @@ describe("SRT library", () => { const value = srt.getSockOpt(socket, SRT.SRTO_MSS); expect(value).toEqual(1052); }); + + it("can set SRT socket in non-blocking mode", () => { + const srt = new SRT(); + const socket = srt.createSocket(); + const result = srt.setSockOpt(socket, SRT.SRTO_RCVSYN, false); + expect(result).not.toEqual(SRT.ERROR); + const value = srt.getSockOpt(socket, SRT.SRTO_RCVSYN); + expect(value).toEqual(false); + }); }); \ No newline at end of file diff --git a/src/node-srt.cc b/src/node-srt.cc index 645f90b..811f7c9 100644 --- a/src/node-srt.cc +++ b/src/node-srt.cc @@ -29,6 +29,7 @@ Napi::Object NodeSRT::Init(Napi::Env env, Napi::Object exports) { StaticValue("SRTO_MSS", Napi::Number::New(env, 0)), StaticValue("SRTO_SNDSYN", Napi::Number::New(env, 1)), + StaticValue("SRTO_RCVSYN", Napi::Number::New(env, 2)), }); @@ -227,6 +228,15 @@ Napi::Value NodeSRT::SetSockOpt(const Napi::CallbackInfo& info) { Napi::Error::New(env, srt_getlasterror_str()).ThrowAsJavaScriptException(); return Napi::Number::New(env, SRT_ERROR); } + } else if (info[2].IsBoolean()) { + Napi::Boolean value = info[2].As(); + int32_t optName = option; + bool optValue = value; + result = srt_setsockflag(socketValue, (SRT_SOCKOPT)optName, &optValue, sizeof(bool)); + if (result == SRT_ERROR) { + Napi::Error::New(env, srt_getlasterror_str()).ThrowAsJavaScriptException(); + return Napi::Number::New(env, SRT_ERROR); + } } return Napi::Number::New(env, result); } @@ -244,12 +254,19 @@ Napi::Value NodeSRT::GetSockOpt(const Napi::CallbackInfo& info) { switch((SRT_SOCKOPT)optName) { case SRTO_MSS: - { - int optValue; - int optSize = sizeof(optValue); - result = srt_getsockflag(socketValue, (SRT_SOCKOPT)optName, (void *)&optValue, &optSize); - return Napi::Value::From(env, optValue); - } + { + int optValue; + int optSize = sizeof(optValue); + result = srt_getsockflag(socketValue, (SRT_SOCKOPT)optName, (void *)&optValue, &optSize); + return Napi::Value::From(env, optValue); + } + case SRTO_RCVSYN: + { + bool optValue; + int optSize = sizeof(optValue); + result = srt_getsockflag(socketValue, (SRT_SOCKOPT)optName, (void *)&optValue, &optSize); + return Napi::Value::From(env, optValue); + } default: Napi::Error::New(env, "SOCKOPT not implemented yet").ThrowAsJavaScriptException(); break;