• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

asticode / go-astisrt / 5794919291

08 Aug 2023 09:01AM UTC coverage: 49.584%. Remained the same
5794919291

push

github

asticode
Added github action

68 of 68 new or added lines in 3 files covered. (100.0%)

893 of 1801 relevant lines covered (49.58%)

6.17 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

82.28
/pkg/socket.go
1
package astisrt
2

3
// #cgo LDFLAGS: -lsrt
4
// #include <srt/srt.h>
5
import "C"
6
import (
7
        "errors"
8
        "fmt"
9
        "net"
10
        "syscall"
11
        "unsafe"
12
)
13

14
type Socket struct {
15
        rr RejectReason
16
        u  C.SRTSOCKET
17
}
18

19
// https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_create_socket
20
func NewSocket() (s *Socket, err error) {
32✔
21
        // Create c socket
32✔
22
        var u C.SRTSOCKET
32✔
23
        if u, err = cCreateSocket(); err != nil {
32✔
24
                return
×
25
        }
×
26

27
        // Create socket
28
        s = newSocketFromC(u)
32✔
29
        return
32✔
30
}
31

32
func newSocketFromC(u C.SRTSOCKET) *Socket {
48✔
33
        return &Socket{u: u}
48✔
34
}
48✔
35

36
// https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_close
37
func (s *Socket) Close() error {
51✔
38
        return cClose(s.u)
51✔
39
}
51✔
40

41
// https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_bind
42
func (s *Socket) Bind(host string, port uint16) (err error) {
12✔
43
        // Create sockaddr
12✔
44
        var sa *sockaddr
12✔
45
        if sa, err = newSockaddrFromHostAndPort(host, port); err != nil {
12✔
46
                err = fmt.Errorf("astisrt: creating sockaddr failed: %w", err)
×
47
                return
×
48
        }
×
49

50
        // Bind
51
        if err = cBind(s.u, sa.addr(), sa.size()); err != nil {
12✔
52
                err = fmt.Errorf("astisrt: binding failed: %w", err)
×
53
                return
×
54
        }
×
55
        return
12✔
56
}
57

58
// https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_listen
59
func (s *Socket) Listen(backlog int) error {
12✔
60
        return cListen(s.u, C.int(backlog))
12✔
61
}
12✔
62

63
// https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_connect
64
func (s *Socket) Connect(host string, port uint16) (addr *net.UDPAddr, err error) {
14✔
65
        // Create sockaddr
14✔
66
        var sa *sockaddr
14✔
67
        if sa, err = newSockaddrFromHostAndPort(host, port); err != nil {
14✔
68
                err = fmt.Errorf("astisrt: creating sockaddr failed: %w", err)
×
69
                return
×
70
        }
×
71

72
        // Connect
73
        var rr C.int
14✔
74
        if rr, err = cConnect(s.u, sa.addr(), sa.size()); err != nil {
16✔
75
                if errors.Is(err, ErrEconnrej) {
4✔
76
                        s.rr = RejectReason(rr)
2✔
77
                }
2✔
78
                err = fmt.Errorf("astisrt: connecting failed: %w", err)
2✔
79
                return
2✔
80
        }
81

82
        // Create udp addr
83
        addr = sa.toUDP()
12✔
84
        return
12✔
85
}
86

87
// https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_accept
88
func (s *Socket) Accept() (a *Socket, addr *net.UDPAddr, err error) {
24✔
89
        // Accept
24✔
90
        var u C.SRTSOCKET
24✔
91
        var raw syscall.RawSockaddrAny
24✔
92
        size := C.int(syscall.SizeofSockaddrAny)
24✔
93
        if u, err = cAccept(s.u, (*C.struct_sockaddr)(unsafe.Pointer(&raw)), &size); err != nil {
36✔
94
                err = fmt.Errorf("astisrt: accepting failed: %w", err)
12✔
95
                return
12✔
96
        }
12✔
97

98
        // Get socket
99
        acceptedSocketsMutex.Lock()
12✔
100
        var ok bool
12✔
101
        if a, ok = acceptedSockets[u]; ok {
16✔
102
                delete(acceptedSockets, u)
4✔
103
        } else {
12✔
104
                a = newSocketFromC(u)
8✔
105
        }
8✔
106
        acceptedSocketsMutex.Unlock()
12✔
107

12✔
108
        // Create sockaddr
12✔
109
        var sa *sockaddr
12✔
110
        if sa, err = newSockaddrFromSockaddrAny(&raw); err != nil {
12✔
111
                err = fmt.Errorf("astisrt: creating sockaddr failed: %w", err)
×
112
                return
×
113
        }
×
114

115
        // Create udp addr
116
        addr = sa.toUDP()
12✔
117
        return
12✔
118
}
119

120
// https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_sendmsg2
121
func (s *Socket) SendMessage(b []byte) (int, error) {
2✔
122
        n, err := cSendMsg2(s.u, (*C.char)(unsafe.Pointer(&b[0])), C.int(len(b)), nil)
2✔
123
        return int(n), err
2✔
124
}
2✔
125

126
// https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_recvmsg2
127
func (s *Socket) ReceiveMessage(b []byte) (int, error) {
2✔
128
        n, err := cRecMsg2(s.u, (*C.char)(unsafe.Pointer(&b[0])), C.int(len(b)), nil)
2✔
129
        return int(n), err
2✔
130
}
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc