554325746@qq.com
2019-08-22 be392a6596e481d82032d85060d1a072d327e3f4
shm.go
@@ -1,10 +1,9 @@
package deliver
import (
   "bytes"
   "errors"
   "fmt"
   "io"
   // "io"
   "time"
@@ -13,8 +12,10 @@
// SHM share memory
type SHM struct {
   rw     *shm.ReadWriteCloser
   typ    td
   rw  *shm.ReadWriteCloser
   typ td
   data []byte
}
// Send impl interface Diliver
@@ -52,18 +53,18 @@
      return nil, errors.New("please open shm consumer first")
   }
   ch := make(chan []byte)
   ch := make(chan int)
   go func(){
      buffer := new(bytes.Buffer)
      _, err := s.rw.WriteTo(buffer)
      if err == nil || err == io.EOF {
         ch <- buffer.Bytes()
      }
      ch <- nil
      n, _ := s.rw.Read(s.data)
      ch <- n
   }()
   select{
   case d := <-ch:
      return d, nil
      if d > 0{
         data := make([]byte, d)
         copy(data, s.data)
         return data, nil
      }
   case <- time.After(3 * time.Second):
      return nil, errors.New("recv time out")
   }
@@ -123,6 +124,7 @@
      return &SHM{
         rw,
         agent,
         make([]byte, maxRecvSize),
      }, nil
   }
@@ -139,6 +141,7 @@
      return &SHM{
         rw,
         coactee,
         make([]byte, maxRecvSize),
      }, nil
   }
   return nil, err