Привет всем. Передаю файл функцией TransmithFile, все нормально, если сокет в блоке. Если блок не ставить то вылетает ошибка переполнения стэка, когда качаю фильм. Ставлю блок, скачивается, но если клиент отключается по какой либо причине или просто перестает слать данные, то мой сокет висит, пропуская "мимо ушей" FD_CLOSE и FD_READ (сообщение об ошибке) т.е переводя в блок я лишаюсь всех тех благ которые представляет ф-ии WSAEventSelect и тд. Как можно совместить и то и то ?
с такой проблемой не сталкивался, но сталкивался с другой, у TransmithFile есть проблемы на не серверных ос. В МСДН сказано что ожидайте разное поведение в серверных и не серверных. Так вот на вокрстэшшене мне не удалось загрузить все ядра процессора этой функцией, блакодаря чему скорость в тесте падала. Совместить можно юзая мемори маппинг, но чтобы адресного пространства хватало нужно 64бит ос или работать по окнам.
блин туплю сижу, если сокет закрывается на той стороне то я получаю ошибку и выхожу из цикла, а если на той стороне ошибка TransmitFile, то я о ней не узнаю... будем надеятся что таких ошибок не будет..
lobzik >Как мемори маппинг может помочь ? Снизить оверхед блочности. Мапиш файл в память и инициируешь один большой асинхронный врайт. Время таймаутов настраивается опциями сокета.