0

spliceLinux でシステム コールを使用してすべてのデータをソケットにプッシュすることにより、パイプを排出したいと考えています。

私の現在の試みは:

ssize_t splice(int i, loff_t* io, int o, loff_t* oo, size_t l, unsigned int flags);
int  spliceAll(int i, loff_t* io, int o, loff_t* oo, size_t l, unsigned int flags) {
  size_t t =  0; int n = 0;
  while (t <  l) { if ((n = splice(i, io, o, oo, l - t, flags)) < 0) break; t += n; }
  return t == l ? 0 : -1;
}

これに相当するユーザー空間バッファーは次のとおりです。

int sendAll(int s, void* b, size_t l, int flags) {
  size_t t =  0; int n = 0;
  while (t <  l) { if ((n = send(s, b + t, l - t, flags)) < 0) break; t += n; }
  return t == l ? 0 : -1;
}

ノンブロッキング ソケット (および のパイプspliceAll) AND send&をsplice決して返さないと仮定し0ます。

  • ループはspliceAll正しいですか?

  • と の両方spliceAllで表示されない他のエラーはありsendAllますか?
4

0 に答える 0