Socket通信(TCP/Blocking I/O)において、read(recv)実行時にEAGAINが発生するケースについて
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が発生するケースはあるのでしょうか。
またあるとすれば、上記の他にどのようなケースが存在するのでしょうか。