Uma chamada de bloqueio retornará quando houver dados disponíveis (e espere por esses dados), uma chamada sem bloqueio retornará dados se houver dados para retornar, caso contrário, retornará um erro dizendo que não há dados (mas sempre retorna "imediatamente" depois de ser chamado).
Se você usa um ou outro depende do que você quer fazer - se você deseja obter esses dados e não há mais nada a fazer, basta chamar uma chamada de bloqueio. Mas às vezes você quer fazer outra coisa se ainda não houver dados.
Veja também select()
, a faca suíça POSIX para "há algum dado?" tipo de chamadas, com chamadas bloqueadas em vários descritores de arquivos, que podem ser cronometrados (assim, se não houver entrada por cinco minutos, você pode retornar com um erro).