code: func BlockingReadv(fd int, iovecs []syscall.Iovec) (int, *tcpip.Error) {
  	for {
  		n, _, e := syscall.RawSyscall(syscall.SYS_READV, uintptr(fd), uintptr(unsafe.Pointer(&iovecs[0])), uintptr(len(iovecs)))
  		if e == 0 {
  			return int(n), nil
  		}
  
  		event := PollEvent{
  			FD:     int32(fd),
  			Events: 1, // POLLIN
  		}
  
  		_, e = BlockingPoll(&event, 1, -1)
  		if e != 0 && e != syscall.EINTR {
  			return 0, TranslateErrno(e)
  		}
  	}
  }
docs: // BlockingReadv reads from a file descriptor that is set up as non-blocking and
  // stores the data in a list of iovecs buffers. If no data is available, it will
  // block in a poll() syscall until the file descriptor becomes readable.