Но его реализация в сабже добавляет масла в огонь: чудесный код из дебрей libcurl, представленный ниже, может ждать до минуты после каждой успешной операции (!!!!!) пока Control Connection не подтвердит что закачка прошла успешно, или не отвалится:
\libcurl\curl-7.20.1\lib\ftp.c |
_Winnie C++ Colorizer |
Не правда ли, это прекрасно?
Как раз сейчас наблюдаю интересную картину, когда Сontrol Connection (не без помощи сил Тьмы NAT) на определенных файлах отваливается ровно через раз, а я получаю минутное ожидание на каждый второй read. Особенно смешно, что сам read проходит практически мгновенно.
Конечно, установка злостных значений для SIO_KEEPALIVE_VALS немного улучшает ситуацию, CURL оказывается не выставляет keep-alives вообще; но все равно, некий батхерт остается.
Трагизм ситуации заключается еще и в том, что это "ожидание подтверждения" вобщем то мне совершено не нужно - данные уже вычитаны, посчитаны и находятся в локальном буфере, можно было бы их уже и использовать.
П.С А это всё select-based схема, в случае, если бы CURL базировалась на IOCP, такого архитектурного косяка впринципе не могло бы существовать
П.П.С Вообще, мне libcurl скорее нравится чем нет, если бы не такие скелеты в шкафу, да еще если бы у нее на уровне дизайна была бы предусмотрена асбтракция "Connection", была бы чудо библиотека
No comments:
Post a Comment