package mem_ring
import (
"net"
"os"
"syscall"
"unsafe"
"golang.org/x/sys/unix"
)
type Notifier struct {
fd int32
}
func NewNotifier(fd int32) Notifier {
return Notifier{fd: fd}
}
func (n Notifier) Notify() {
val := uint8(0)
for {
_, e := syscall.Write(int(n.fd), (*(*[1]byte)(unsafe.Pointer(&val)))[:])
if e == unix.EINTR {
continue
}
return
}
}
type Awaiter struct {
fd int32
}
func NewAwaiter(fd int32) Awaiter {
return Awaiter{fd: fd}
}
func (n Awaiter) Wait() {
f := os.NewFile(uintptr(n.fd), "fd")
c, e := net.FileConn(f)
if e != nil {
panic(e)
}
var buf [64]byte
c.Read(buf[:])
}