1 //go:build linux 2 3 package sockets 4 5 import ( 6 "io" 7 8 "golang.org/x/sys/unix" 9 ) 10 11 type monitor struct { 12 fd int 13 closed bool 14 } 15 16 func (m *monitor) Read(p []byte) (int, error) { 17 n, err := unix.Read(m.fd, p) 18 if m.closed { 19 return 0, io.EOF 20 } 21 return n, err 22 } 23 24 func (m *monitor) Close() error { 25 if m.closed { 26 return nil 27 } 28 m.closed = true 29 return unix.Close(m.fd) 30 } 31