Skip to content

Commit 513b375

Browse files
committed
Change Read/Write so they conform to io.Reader/io.Writer
1 parent 723b873 commit 513b375

File tree

3 files changed

+29
-16
lines changed

3 files changed

+29
-16
lines changed

examples/echo-receiver/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ func listenCallback(socket *srtgo.SrtSocket, version int, addr *net.UDPAddr, str
3434
func handler(socket *srtgo.SrtSocket, addr *net.UDPAddr) {
3535
buf := make([]byte, 1500)
3636
for {
37-
len, err := socket.Read(buf, 1)
37+
len, err := socket.Read(buf)
3838
if err != nil {
3939
log.Println(err)
4040
return
4141
}
42-
_, err = socket.Write(buf[:len], 1)
42+
_, err = socket.Write(buf[:len])
4343
if err != nil {
4444
log.Println(err)
4545
return

examples/file-receiver/main.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,13 @@ func main() {
2727
s, _, err := a.Accept()
2828
if err != nil {
2929
panic("Error on Accept")
30-
break
3130
}
3231

3332
buff := make([]byte, 2048)
3433
fo, err := os.Create("sample.ts")
3534
w := bufio.NewWriter(fo)
3635
for {
37-
n, err := s.Read(buff, 10000)
36+
n, err := s.Read(buff)
3837

3938
if err != nil {
4039
fmt.Println(err)

srtgo.go

+26-12
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ type SrtSocket struct {
5151
options map[string]string
5252
mode int
5353
pktSize int
54+
pollTimeout int64
5455
}
5556

5657
var (
@@ -89,6 +90,7 @@ func NewSrtSocket(host string, port uint16, options map[string]string) *SrtSocke
8990
s.host = host
9091
s.port = port
9192
s.options = options
93+
s.pollTimeout = -1
9294

9395
val, exists := options["pktsize"]
9496
if exists {
@@ -194,7 +196,7 @@ func (s SrtSocket) Accept() (*SrtSocket, *net.UDPAddr, error) {
194196
if !s.blocking {
195197
// Socket readiness for connection is checked by polling on WRITE allowed sockets.
196198
len := C.int(2)
197-
timeoutMs := C.int64_t(-1)
199+
timeoutMs := C.int64_t(s.pollTimeout)
198200
ready := [2]C.int{SRT_INVALID_SOCK, SRT_INVALID_SOCK}
199201
if C.srt_epoll_wait(s.epollConnect, &ready[0], &len, nil, nil, timeoutMs, nil, nil, nil, nil) == -1 {
200202
return nil, nil, fmt.Errorf("srt accept, epoll error: %s", C.GoString(C.srt_getlasterror_str()))
@@ -255,7 +257,7 @@ func (s SrtSocket) Connect() error {
255257
if !s.blocking {
256258
// Socket readiness for connection is checked by polling on WRITE allowed sockets.
257259
len := C.int(2)
258-
timeoutMs := C.int64_t(-1)
260+
timeoutMs := C.int64_t(s.pollTimeout)
259261
ready := [2]C.int{SRT_INVALID_SOCK, SRT_INVALID_SOCK}
260262
if C.srt_epoll_wait(s.epollConnect, nil, nil, &ready[0], &len, timeoutMs, nil, nil, nil, nil) != -1 {
261263
state := C.srt_getsockstate(s.socket)
@@ -276,17 +278,17 @@ func (s SrtSocket) Connect() error {
276278
}
277279

278280
// Read data from the SRT socket
279-
func (s SrtSocket) Read(b []byte, timeout int) (n int, err error) {
281+
func (s SrtSocket) Read(b []byte) (n int, err error) {
280282
if !s.blocking {
281283
len := C.int(2)
282-
timeoutMs := C.int64_t(timeout)
284+
timeoutMs := C.int64_t(s.pollTimeout)
283285
ready := [2]C.int{SRT_INVALID_SOCK, SRT_INVALID_SOCK}
284286

285287
if C.srt_epoll_wait(s.epollIo, &ready[0], &len, nil, nil, timeoutMs, nil, nil, nil, nil) == SRT_ERROR {
286288
if C.srt_getlasterror(nil) == C.SRT_ETIMEOUT {
287289
return 0, nil
288290
}
289-
return 0, fmt.Errorf("error in read:epoll")
291+
return 0, fmt.Errorf("error in read:epoll %s", C.GoString(C.srt_getlasterror_str()))
290292
}
291293
}
292294

@@ -299,22 +301,22 @@ func (s SrtSocket) Read(b []byte, timeout int) (n int, err error) {
299301
}
300302

301303
// Write data to the SRT socket
302-
func (s SrtSocket) Write(b []byte, timeout int) (n int, err error) {
304+
func (s SrtSocket) Write(b []byte) (n int, err error) {
303305
if !s.blocking {
304-
timeoutMs := C.int64_t(timeout)
306+
timeoutMs := C.int64_t(s.pollTimeout)
305307
len := C.int(2)
306308
ready := [2]C.int{SRT_INVALID_SOCK, SRT_INVALID_SOCK}
307309
rlen := C.int(2)
308310
rready := [2]C.int{SRT_INVALID_SOCK, SRT_INVALID_SOCK}
309311

310312
if C.srt_epoll_wait(s.epollIo, &rready[0], &rlen, &ready[0], &len, timeoutMs, nil, nil, nil, nil) == SRT_ERROR {
311-
return 0, fmt.Errorf("error in read:epoll")
313+
return 0, fmt.Errorf("error in write:epoll %s", C.GoString(C.srt_getlasterror_str()))
312314
}
313315
}
314316

315317
res := C.srt_sendmsg2(s.socket, (*C.char)(unsafe.Pointer(&b[0])), C.int(len(b)), nil)
316318
if res == SRT_ERROR {
317-
return 0, fmt.Errorf("error in read:srt_sendmsg2")
319+
return 0, fmt.Errorf("error in write:srt_sendmsg2 %s", C.GoString(C.srt_getlasterror_str()))
318320
}
319321

320322
return int(res), nil
@@ -325,7 +327,7 @@ func (s SrtSocket) Stats() (*SrtStats, error) {
325327
var stats C.SRT_TRACEBSTATS = C.SRT_TRACEBSTATS{}
326328
var b C.int = 1
327329
if C.srt_bstats(s.socket, &stats, b) == SRT_ERROR {
328-
return nil, fmt.Errorf("Error getting stats")
330+
return nil, fmt.Errorf("Error getting stats, %s", C.GoString(C.srt_getlasterror_str()))
329331
}
330332

331333
return newSrtStats(&stats), nil
@@ -341,6 +343,18 @@ func (s SrtSocket) PacketSize() int {
341343
return s.pktSize
342344
}
343345

346+
// PollTimeout - Return polling max time, in milliseconds, for connect/read/write operations.
347+
// Only applied when socket is in non-blocking mode.
348+
func (s SrtSocket) PollTimeout() int64 {
349+
return s.pollTimeout
350+
}
351+
352+
// SetPollTimeout - Sets polling max time, in milliseconds, for connect/read/write operations.
353+
// Only applied when socket is in non-blocking mode.
354+
func (s SrtSocket) SetPollTimeout(pollTimeout int64) {
355+
s.pollTimeout = pollTimeout
356+
}
357+
344358
// Close the SRT socket
345359
func (s SrtSocket) Close() {
346360
if !s.blocking {
@@ -517,7 +531,7 @@ func (s SrtSocket) SetSockOptString(opt int, value string) error {
517531
func (s SrtSocket) setSockOpt(opt int, data unsafe.Pointer, size int) error {
518532
res := C.srt_setsockopt(s.socket, 0, C.SRT_SOCKOPT(opt), data, C.int(size))
519533
if res == -1 {
520-
return fmt.Errorf("Error calling srt_setsockopt")
534+
return fmt.Errorf("Error calling srt_setsockopt %v", C.GoString(C.srt_getlasterror_str()))
521535
}
522536

523537
return nil
@@ -526,7 +540,7 @@ func (s SrtSocket) setSockOpt(opt int, data unsafe.Pointer, size int) error {
526540
func (s SrtSocket) getSockOpt(opt int, data unsafe.Pointer, size *int) error {
527541
res := C.srt_getsockopt(s.socket, 0, C.SRT_SOCKOPT(opt), data, (*C.int)(unsafe.Pointer(size)))
528542
if res == -1 {
529-
return fmt.Errorf("Error calling srt_getsockopt")
543+
return fmt.Errorf("Error calling srt_getsockopt %v", C.GoString(C.srt_getlasterror_str()))
530544
}
531545

532546
return nil

0 commit comments

Comments
 (0)