最初に、少し背景を説明します。私は、個人プロジェクト用の基本的な FTP サーバーを作成しています。現在、ファイルの取得に取り組んでいます。私の現在の実装は次のようになります。
HANDLE hFile = CreateFile("file.tar.gz", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
TransmitFile(sd, hFile, fileSize, 65536, NULL, NULL, TF_USE_KERNEL_APC | TF_WRITE_BEHIND);
CloseHandle(hFile);
動作しますが、パフォーマンスには疑問があります。最初は、転送は約 10 MB/秒で始まりますが、ゆっくりと約 3 MB/秒まで減少します。FileZilla Server と IIS FTP を使用して、30 MB/秒を超える一貫した転送速度を維持します。したがって、私はそれが十分に機能していないことを知っています。バッファサイズをいじってみましたが、パフォーマンスは向上しません。ファイルを転送するためのより効率的な方法について提案がある場合は、お知らせください。API ドキュメントは、TransmitFile が私のアプリケーション用に最適化されていることを示唆しているようです。
[Windows API の知識がないことをお許しください。]
また、すべてのソケットは localhost で開かれます。