Мне нужна небольшая помощь, если у кого-то есть минутка.Я написал веб-сервер, используя порты завершения ввода-вывода, но у меня возникли проблемы с отправкой больших файлов.Кажется, что веб-страницы загружаются нормально, но во время передачи больших файлов WSASend () завершается ошибкой через несколько минут с ошибкой «Указанное сетевое имя больше не доступно».
Сейчас мой сервер просто закрывает соответствующее соединениекогда любая перекрывающаяся операция завершается неудачно.Это правильная вещь?или я должен повторить неудачные операции с перекрытием несколько раз, прежде чем закрыть сокет?Я использую сокеты tcp / stream.
(исправлено) Я также получаю то, что похоже на случайные 0-байтовые пакеты от WSARecv.Я не уверен, что с этим делать, или если проблема связана. (/ Исправлено)
Спасибо за любую помощь
edit: теперь, когда сервер правильно обрабатывает соединения и имеетгораздо более полный журнал, кажется, что Лен прав.Клиент по какой-то причине закрывает соединение.
Журнал:
Initializing Windows Sockets...
Forwarding port 80...
Starting server...
Waiting for incoming connections...
Socket 1128: Client connected.
Socket 1128: Request received
Socket 1128: Sent response
Socket 1128: Error 64: SendChunk() failed. //WSASend()
Socket 1128: Closing connection - GetQueueCompletionStatus == FALSE
, поэтому возникает вопрос: зачем клиенту закрывать соединение?Это займет от 2 до 5 минут.Я уменьшил размер буфера до 4098 байт за отправку и отправляю следующий блок только после завершения первого.
Еще раз спасибо за любые идеи по этому поводу.
ps Я даже только что реализовалПовторите функцию, чтобы пять раз повторить неудачную операцию ввода-вывода, прежде чем сдаться .... все равно не повезло = (