Socket通信(TCP/Blocking I/O)において、以下のようなコードでreadを実行した際に
EAGAINが発生した場合、その原因としてどのようなケースが考えられるのでしょうか?

while ((c = read(fileno(din), buf, bufsize)) > 0) {
    // something to do
}

EAGAINは主にNon-Blocking I/O時に読み込むデータが無い場合等で発生する認識でしたが、
以下のmanの記載では、Blocking I/O時にもSO_RCVTIMEOが設定されている且つreadが
タイムアウトした場合も発生するように読み取れます。
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/socket.7.html

上記記載の通り、Blocking I/OにおいてもEAGAINが発生するケースはあるのでしょうか。
またあるとすれば、上記の他にどのようなケースが存在するのでしょうか。