as @SteffenUllrich pointed out, before checking errno we must make sure that recvfrom has a bad return value.
errno
recvfrom
int rv = recvfrom(..); if (rv < 0 && errno == EWOULDBLOCK) { ... }
silly mistake, my bad.