code: func BlockingRead(fd int, b []byte) (int, *tcpip.Error) {
  	for {
  		n, _, e := syscall.RawSyscall(syscall.SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)))
  		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: // BlockingRead reads from a file descriptor that is set up as non-blocking. If
  // no data is available, it will block in a poll() syscall until the file
  // descirptor becomes readable.