From fa89b4cd58f4b71fdcda3736e10ded1bad263aaf Mon Sep 17 00:00:00 2001
From: 554325746@qq.com <554325746@qq.com>
Date: 星期三, 21 八月 2019 10:31:17 +0800
Subject: [PATCH] add shm timeout
---
shm.go | 55 +++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 45 insertions(+), 10 deletions(-)
diff --git a/shm.go b/shm.go
index 8d40445..5a87130 100644
--- a/shm.go
+++ b/shm.go
@@ -5,6 +5,8 @@
"fmt"
"io"
+ "time"
+
"github.com/tmthrgd/shm-go"
)
@@ -20,12 +22,26 @@
return errors.New("please init shm producer first")
}
- n, err := s.rw.Write(data)
- if n < 1 {
- fmt.Println("recv data less than 1 length")
+ ch := make(chan int)
+ go func(){
+ n, _ := s.rw.Write(data)
+ ch <- n
+ }()
+ select{
+ case <-ch:
+ return nil
+ case <- time.After(3 * time.Second):
+ return errors.New("send time out")
}
- return err
+ return errors.New("send should't here")
+
+ // n, err := s.rw.Write(data)
+ // if n < 1 {
+ // fmt.Println("recv data less than 1 length")
+ // }
+
+ // return err
}
// Recv impl interface Diliver
@@ -35,14 +51,33 @@
return nil, errors.New("please open shm consumer first")
}
- data := make([]byte, maxRecvSize)
- n, err := s.rw.Read(data)
- if err == nil || err == io.EOF {
- data = data[:n:n]
- return data, nil
+ ch := make(chan []byte)
+ go func(){
+ data := make([]byte, maxRecvSize)
+ n, err := s.rw.Read(data)
+ if err == nil || err == io.EOF {
+ data = data[:n:n]
+ }
+ ch <- data
+ }()
+ select{
+ case d := <-ch:
+ return d, nil
+ case <- time.After(3 * time.Second):
+ return nil, errors.New("recv time out")
}
- return nil, err
+ return nil, errors.New("recv should't here")
+
+
+ // data := make([]byte, maxRecvSize)
+ // n, err := s.rw.Read(data)
+ // if err == nil || err == io.EOF {
+ // data = data[:n:n]
+ // return data, nil
+ // }
+
+ // return nil, err
}
// Close impl interface Deliver
--
Gitblit v1.8.0