Skip to content

Commit d4ed7d4

Browse files
authored
fix setting linger option, improve linger test (#40)
1 parent 27de7e4 commit d4ed7d4

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

srtgo_test.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,16 @@ func TestNewSocketLinger(t *testing.T) {
3131
a := NewSrtSocket("localhost", 8090, options)
3232

3333
if a == nil {
34-
t.Error("Could not create a srt socket")
34+
t.Error("Could not create a srt socket with linger")
35+
}
36+
37+
// read back value to make sure
38+
res, err := getSocketLingerOption(a)
39+
if err != nil {
40+
t.Error(err)
41+
}
42+
if res != 1000 {
43+
t.Error("Failed to set linger option")
3544
}
3645
}
3746

srtsocketoptions.go

+19-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package srtgo
55
import "C"
66

77
import (
8+
"errors"
89
"fmt"
910
"strconv"
1011
"syscall"
@@ -108,8 +109,24 @@ func setSocketLingerOption(s C.int, li int32) error {
108109
} else {
109110
lin.Onoff = 0
110111
}
111-
// C.srt_setsockopt(s.socket, bindingPre, C.SRTO_LINGER, unsafe.Pointer(&lin), C.int(unsafe.Sizeof(lin)))
112-
return syscall.SetsockoptLinger(int(s), bindingPre, syscall.SO_LINGER, &lin)
112+
res := C.srt_setsockopt(s, bindingPre, C.SRTO_LINGER, unsafe.Pointer(&lin), C.int(unsafe.Sizeof(lin)))
113+
if res == SRT_ERROR {
114+
return errors.New("failed to set linger")
115+
}
116+
return nil
117+
}
118+
119+
func getSocketLingerOption(s *SrtSocket) (int32, error) {
120+
var lin syscall.Linger
121+
size := int(unsafe.Sizeof(lin))
122+
err := s.getSockOpt(C.SRTO_LINGER, unsafe.Pointer(&lin), &size)
123+
if err != nil {
124+
return 0, err
125+
}
126+
if lin.Onoff == 0 {
127+
return 0, nil
128+
}
129+
return lin.Linger, nil
113130
}
114131

115132
// Set socket options for SRT

0 commit comments

Comments
 (0)