Сначала немного фона -
Я пишу базовый 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 МБ / с, но постепенно уменьшается до 3 МБ / с. Используя FileZilla Server и IIS FTP, он поддерживает постоянную скорость передачи> 30 МБ / с. Поэтому я знаю, что он не работает на полную мощность. Я пробовал возиться с размером буфера, но это не улучшило производительность.
Если у кого-нибудь есть предложения по более эффективному способу передачи файла, пожалуйста, дайте мне знать. Документация по API, кажется, предполагает, что TransmitFile был оптимизирован для моего приложения, поэтому я решил использовать его.
[Прошу прощения за отсутствие знаний о API Windows.]
Также все сокеты открываются на localhost.