Can set socket in non-blocking mode

This commit is contained in:
birme 2020-06-24 11:12:02 +02:00
parent cbf6e2ca87
commit 62b4e43ebe
2 changed files with 32 additions and 6 deletions

View file

@ -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);
});
});

View file

@ -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<Napi::Boolean>();
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;