github.com/rancher/longhorn-engine@v0.6.2/replica/rpc/dataserver.go (about) 1 package rpc 2 3 import ( 4 "net" 5 6 "github.com/sirupsen/logrus" 7 8 "github.com/longhorn/longhorn-engine/dataconn" 9 "github.com/longhorn/longhorn-engine/replica" 10 ) 11 12 type DataServer struct { 13 address string 14 s *replica.Server 15 } 16 17 func NewDataServer(address string, s *replica.Server) *DataServer { 18 return &DataServer{ 19 address: address, 20 s: s, 21 } 22 } 23 24 func (s *DataServer) ListenAndServe() error { 25 addr, err := net.ResolveTCPAddr("tcp", s.address) 26 if err != nil { 27 return err 28 } 29 30 l, err := net.ListenTCP("tcp", addr) 31 if err != nil { 32 return err 33 } 34 35 for { 36 conn, err := l.AcceptTCP() 37 if err != nil { 38 logrus.Errorf("failed to accept connection %v", err) 39 continue 40 } 41 42 logrus.Infof("New connection from: %v", conn.RemoteAddr()) 43 44 go func(conn net.Conn) { 45 server := dataconn.NewServer(conn, s.s) 46 server.Handle() 47 }(conn) 48 } 49 }