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