示例#1
0
func echoN(r, w *poller.FD, n int) error {
	var err error
	for i := 0; i < n; i++ {
		var m msg
		err = r.SetReadDeadline(time.Now().Add(2 * time.Second))
		if err != nil {
			err = fmt.Errorf("set R dl #%d: %v", i, err)
			break
		}
		m, err = rcvMsg(r)
		if err != nil {
			err = fmt.Errorf("cannot rcv #%d: %v", i, err)
			break
		}
		if m.Seq() != uint32(i) {
			err = fmt.Errorf("rcv seq %d != %d", m.Seq(), i)
			break
		}
		err = w.SetWriteDeadline(time.Now().Add(2 * time.Second))
		if err != nil {
			err = fmt.Errorf("set W dl #%d: %v", i, err)
			break
		}
		err = m.Send(w)
		if err != nil {
			err = fmt.Errorf("cannot send #%d: %v", i, err)
			break
		}
	}
	return err
}
示例#2
0
func sendN(r, w *poller.FD, n int) error {
	var err error
	for i := 0; i < n; i++ {
		var ms, mr msg
		ms = randMsg(uint32(i))
		err = w.SetWriteDeadline(time.Now().Add(2 * time.Second))
		if err != nil {
			err = fmt.Errorf("set W dl #%d: %v", i, err)
			break
		}
		err = ms.Send(w)
		if err != nil {
			err = fmt.Errorf("cannot send #%d: %v", i, err)
			break
		}
		err = r.SetReadDeadline(time.Now().Add(2 * time.Second))
		if err != nil {
			err = fmt.Errorf("set R dl #%d: %v", i, err)
			break
		}
		mr, err = rcvMsg(r)
		if err != nil {
			err = fmt.Errorf("cannot rcv #%d: %v", i, err)
			break
		}
		if mr.Seq() != uint32(i) {
			err = fmt.Errorf("rcv seq %d != %d", mr.Seq(), i)
			break
		}
		if !bytes.Equal(ms.Data(), mr.Data()) {
			err = fmt.Errorf("data not equal for #%d", i)
			break
		}
	}
	return err
}