仕事ではネットワーク関係のC++を書いてます

お前は今まで書いた

size_t nRecvTot = 0;
while (len > nRecvTot) {
  const ssize_t nRecv = ::recv(sock, &buf[off + nRecvTot], len - nRecvTot, 0);
  if (0 > nRecv) {
    const int eno = errno;
    if (EINTR == eno || EAGAIN == eno)
      continue;
    return -1;
  } else if (0 == nRecv)
    return 0;
  nRecvTot += nRecv;
}
return nRecvTot;

の数を覚えているのか? (ここにタイムアウトの考慮が挟まるとさらにめんどくなる.)
C++やってるといつも同じようなことを繰り返し書いてるような気がしてるんだが... 生産性低い...