vRp.CD2g_test/server/client/uds.go

49 lines
841 B
Go

package client
import (
"net"
)
func NewUnixDomainSocket(addr string) *Client {
return NewClient(&UnixDomainSocket{
addr: addr,
})
}
type UnixDomainSocket struct {
conn net.Conn
addr string
closed bool
}
func (slf *UnixDomainSocket) Run(runState chan<- error, receive func(wst int, packet []byte)) {
c, err := net.Dial("unix", slf.addr)
if err != nil {
runState <- err
return
}
slf.conn = c
runState <- nil
packet := make([]byte, 1024)
for !slf.closed {
n, readErr := slf.conn.Read(packet)
if readErr != nil {
panic(readErr)
}
receive(0, packet[:n])
}
}
func (slf *UnixDomainSocket) Write(packet *Packet) error {
_, err := slf.conn.Write(packet.data)
return err
}
func (slf *UnixDomainSocket) Close() {
slf.closed = true
}
func (slf *UnixDomainSocket) GetServerAddr() string {
return slf.addr
}