func (sw *SSwitch) handleNetworkConnection(conn net.Conn) { defer conn.Close() reader := bufio.NewReader(conn) assert(nil != reader) for { // err := conn.SetReadDeadline(time.Now().Add(2 * time.Millisecond)) // if nil != err { // LogErr("%s conn.SetReadDeadline conn %s err %s", // GetCurrentFuncName(), conn, err) // return // } var pkglen int var err error { var totalLen uint32 err = binary.Read(reader, binary.BigEndian, &totalLen) if nil != err { LogErr("%s binary.Read err %s", GetCurrentFuncName(), err) return } pkglen = int(totalLen) assert(0 <= pkglen) } var pkg []byte for len(pkg) < pkglen { value := make([]byte, pkglen-len(pkg)) readlen, err := reader.Read(value) if nil != err { LogErr("%s binary.Read pkglen %d err %s", GetCurrentFuncName(), pkglen, err) return } assert(0 < readlen) pkg = append(pkg, value...) } assert(pkglen == len(pkg)) msg := pb.Message{} err = msg.Unmarshal(pkg) if nil != err { LogErr("%s pb.Message.Unmarshal err %s", GetCurrentFuncName(), err) return } if _, ok := sw.peers[msg.From]; !ok || sw.id != msg.To { LogDebug("%s ignore msg %v", GetCurrentFuncName(), msg) continue } LogDebug("net switch hostid %d recv msg (type %s) %v", sw.id, pb.MessageType_name[int32(msg.Type)], msg) // feed msg into node select { case sw.nrecvc <- msg: case <-sw.done: return } } }