You could try the open first, and msleep only if it fails.

Also, you might want to look into retrying the open on EINTR, using something like

do {
  iFd = open ...
} while (iFd == -1 && errno == EINTR);