Версии Synapse и некоторые сведения про тайм-ауты в Synapse

Во-первых, при переходе с Indy на Synapse у разработчиков часто возникают вопросы именно в части того, как Synapse использует различные таймауты, а именно — как установить таймаут на соединение, чтение/запись данных, почему не срабатывает таймаут и т.д. Достаточно забить в поиск фразу «таймаут synapse» и посмотреть различные обсуждения на форумах.

Во-вторых, т.к. библиотека Synapse постоянно развивается и дорабатывается, то может возникнуть ситуация, когда какое-либо свойство объекта Synapse отсутствует в исходниках разработчика, но имеется в той версии библиотеки, которую используем мы, когда пишем о Synapse.

Так как специально вопрос использования тайм-аутов в Synapse мы в главе по сокетам не рассматривали, то, думаю, что этот пост станет небольшим примечанием (или несколькими примечаниями) в книге и поможет избавить разработчиков от некоторых вопросов по использованию Synapse.

Версия Synapse и версии модулей Synapse

На момент написания этой статьи самой актуальной стабильной версией Synapse была Synapse release no. 40 . Актуальная версия библиотеки выкладывается на этой странице официального сайта в виде обычного zip-архива, содержащего все модули библиотеки.

Итак, с версией библиотеки разобрались — это двухзначное число (пока двухзначное), которое можно увидеть на странице загрузок

Помимо архива со стабильной версией нам также предоставляется возможность получать самые свежие исходники Synapse из репозитория на SourceForge. О том, как скачивать исходники из SVN можно узнать из двух статей, опубликованных в блоге ранее.

Ошибка MySQL Server Has Gone Away (error 2006) может возникнуть в двух случаях.

Таймаут соединения

Наиболее распространенная проблема: таймаут соединения, в результате чего сервер его закрывает. Решение весьма тривиальное — увеличение лимита времени wait_timeout в файле конфигурации my.cnf . Для этого в Debian нужно выполнить:

Sudo nano /etc/mysql/my.cnf

# Открытие файла настроек MySQL

Затем установить тайм-аут ожидания:

Wait_timeout = 600

# Время ожидания в секундах, можно установить вплоть до 28800 с (8 часов)

Не забудьте перезагрузить базу:

Sudo /etc/init.d/mysql restart

Иногда, при выполнении длительных запланированных задач, также может появиться ошибка MySQL Server Has Gone Away все из-за того же таймаута соединения. При этом лимит времени не получится существенно увеличить (максимум до нескольких часов), так как это может привести к заполнению буфера ожидающими соединениями.

Поэтому лучше проверить соединение и, при необходимости, переподключиться.

$link = mysql_connect ("localhost","root","root"); # Здесь будут cron jobs if(!mysql_ping ($link)) $link = mysql_connect ("localhost","root","root", true);

# Подключение БД и переподключение при необходимости

Большой или некорректный пакет

Вторая распространенная проблема: сервер получает большой или некорректный пакет и отклоняет его. В этом случае сервер считает, что проблема на стороне клиента и закрывает соединение. Так что для решения нужно увеличить лимит на максимальный размер пакета все в том же файле конфигурации:

... max_allowed_packet = 64M …

# Увеличение лимита размера входящего пакета, в МБ

Также не забудьте перезагрузить базу данных.

Самое главное

После того, как устраните ошибку MySQL Server Has Gone Away, поиграйтесь с параметрами wait_timeout и max_allowed_packet для получения оптимальных лимитов.

Если вы получаете сообщение (именно при запуске программы, или при подключении к хабам ):

  • "Попытка установить соединение была безуспешной так как от другого компьютера за требуемое время не получен нужный отклик или было разорвано уже установленное соединение из-за неверного отклика уже подключённого компьютера"
  • "Требуемый адрес для своего контекста неверен"

ВОЗМОЖНЫЕ ПРИЧИНЫ (первая -- наиболее вероятная):

  • У вас не установленно соединение с интернет или программу не пускает в сеть ваш фаервол.
  • Имеется проблема в локальной сети (ведутся работы, и т.п.)
  • У вас закрыт порт, на котором производится подключение. Для DC++ обычно это TCP-порт с номером 4111. Отключайте firewall-ы и антивирусы.

Если вы получаете сообщение: "Удаленный хост принудительно разорвал существующее подключение." -- это значит, что физически прервалась связь. Обрезали провод, выключили хаб, или просто потери пакетов в линии. Попробуйте переподключиться снова. Если не помогает -- возможно это проблема в сети, либо "шалит" ваш фаервол, смотрите его логи. Попробуйте также отключить firewall полностью и посмотреть, что будет (подробнее о фаерволах читайте ниже).

Проблемы со скачиванием файлов или поиском в DC++

Если у вас всё качалось, а потом вдруг перестало - вспомните, какие программы вы устанавливали в этот период времени. Вполне вероятно, дело именно в них. Но если вы ничего с компьютером не делали - просто так ничего работать обычно не перестаёт.

Если Вы ставите на скачивание файл (или список файлов), он появляется снизу в списке закачек, и DC++ пишет Соединение... (Connecting... ), размер -1B и ничего не происходит. Или же он пишет "connection timeout" (таймаут соединения). Значит у вас что-то не так настроено.

Аналогично, если у вас не работает поиск файлов, значит тоже имеются проблемы с настройкой DC++ или других программ.

Проверьте возможность скачки с пассивных пользователей. Если скачка с них идет нормально, значит скорее всего проблема в Вашем фаерволе. Нужно открыть 4000 порт по протоколу UDP.

ВАЖНО: Для нормальной работы DC++ в сети 2КОМ в настройках вашей программы должно быть указанно следующее:

  • В поле "Сетевой интерфейс для всех соединений" должен быть указано 0.0.0.0)
  • значения портов должны равняться 4000
  • тип подключения должен быть "Фаерволл с ручным перенаправлением портов" , а не Активный!
  • В поле "Внешний/WAN IP" также должен быть просписан ваш VPN или DHCP адрес. Это (144.76.94.14 ). В случае если нижеперечисленные пункты настроены правильно, то этот адрес будет вписываться автоматически.
  • В первой строке под кнопкой "Найти IP адреса" должен быть указан адрес http://сайт/getip.php
  • В фаерволе, для вашего клиента DC, должны быть открыты порты 4000 по протоколам TCP и UDP. Протокол UDP нужен для работы поиска.
  • Убедитесь что в пункте "Обновить IP при старте" стоит галочка . Иначе у вас могут быть проблемы если поменяется ваш IP (например исчерпание лимита, смена тарифа и т.п.)
  • В настройках "любимого" хаба поле IP должно быть пустым
Ваш внутренний VPN или DHCP адрес: 144.76.94.14 , именно этот адрес и нужно будет указывать в настройках программы. Ваш VPN адрес вы можете узнать на этой странице: , именно этот адрес и нужно будет указывать в настройках программы.
Подробная инструкция по настройке DC клиента здесь:

У меня поиск не работает

Прочитайте предыдущий ответ... Обращу ваше внимание на то что поиск работает по протоколу UDP, а скачка по TCP. По этому возможно что вы в своем фаерволе разрешили DC клиенту работать по 4000 порту TCP, а 4000 порт по UDP разрешить забыли... вот он и не работает. Других вариантов особо нет, по этому смотрите свой фаервол.

Программные фаерволлы (firewalls) и брандмауэры

Часто работа DC++ блокируется FireWall-ом (Фаерволл, Брандмауэр) - программой, которая защищает компьютер от атак из сети, или антивирусными программами .

ОБЩИЙ СОВЕТ: Если есть проблемы с закачками и поиском, отключите (или настройте) firewall-ы, бранмдмауэр Windows, а также антивирусы и другие средства сетевой зашиты. Как -- читайте далее.

Если у Вас не установлено firewall-ов, и операционная система Windows XP SP2 или Vista : добавьте DC++ в список исключений брэндмауэра Windows: при первом запуске программы (точнее, при подключении к хабу) Windows спросит вас, разрешать подключение или нет. Вы должны сказать ему "разрешить" ("unblock").

Прочие "вредоносные" программы

Ниже приведён перечень программ, которые могут влиять на работу DC++. Если у вас имеются проблемы с DC++ и установлена одна их них --- полностью отключите её или деинсталлируйте (просто для того чтобы убедиться, что дело именно в ней). Если снос программы не поможет -- значит мешает что-то ещё.

Итак, проверьте, нет ли у вас чего-нибудь из перечисленного:

Антивирусы:
Касперский (Антивирус, АнтиХакер, Internet Security), Eset NOD32, Symantec (Norton AntiVirus, Internet Security), Trend PC-Cillin, Avast, McAfee Antivirus.

FireWall-ы:
Outpost, WinGate, UserGate, WinProxy, WinRoute, ZoneAlarm, Comodo.

Большинство этих программ имеют возможность полного отключения. Для проверки того, что проблемы в DC++ вызваны именно ими, отключите их, перезапустите DC++ и проверьте снова. Часто помогает добавление DC++ в список исключений firewall-а.

Для подключения к хабу сайт должен быть открыт 4111 -й TCP-порт и 4000 порты на любые адреса. Многие firewall-ы предоставляют возможность открыть конкретные порты для соединений DC++.

Роутеры (routers, маршрутизаторы) и аппаратные firewall-ы

Владельцам компьютеров с материнскими платами на чипсете nForce4 рекомендуем в случае наличия проблем отключить аппаратный firewall, встроенный интегрированную в сетевую плату (nVidia Firewall ).

Если не скачиваются файлы объемом более 4 Гб

Если у вас не скачиваются большие файлы (программа пишет, что нет места не диске), проверьте что диск, на который идёт закачка, имеет файловую систему NTFS, так как FAT не работает с файлами более 2Гб. Если у вас FAT32, то имеет смысл отконвертировать диск в NTFS. Делается это с помощью комманды консоли командой convert X: /FS:NTFS

Вместо X: дожна быть буква того диска, который Вы преобразуете. Если он слишком заполнен, то преобразование невозможно. После этого он попросит ввести метку диска (посмотреть ее можно в свойствах диска):

Преобразование происходит не мгновенно, оно занимает некоторое время (обычно несколько минут). При этом все данные на диске сохраняются (не выключайте питание во время конвертации!)

Примечание: (для более продвинутых!) если у вас не хватает места для конвертации, но раздел на диске не единственный, и вам нужно изменить размер разделов диска, скачайте или найдите в сети программу Acronis Disk Director Suite 10.0 (Оф. сайт) и выполните преобразование с ее помощью. Как ею пользоваться, разберетесь... там всё просто. Устанавливаете, запускаете, если она спросит про "manual partition mode" и "automatic partition mode", выберите "manual", дальше она покажет вам ваши диски и разделы... Жмёте ПКМ на раздел, там его можно "преобразовать" ("convert") или изменить размер ("resize")... Следуйте её инструкциям. На всякий случай, если не знаете английский, возьмите словарь и переведите, что она Вам пишет. Программа небезопасная, ею можно угрохать весь диск и все данные в два счета, если просто тупо нажимать OK, или ту кнопку, которая ближе. ;-) Кстати, эта же программа умеет делать почти всё что угодно с дисками, начиная от дефрагментации и заканчивая созданием новых разделов с любой наперед заданной файловой системой.

Файлы не перемещаются из папки с незавершенными закачками

Иногда бывает так: файл скачивается, но остаётся в папке с незавершенными закачками и странным (искаженным) именем. Судя по всему это баг DC++. Проявляется оно тогда, когда папки Incomplete и Downloads находятсяна РАЗНЫХ разделах (например, одна на C: , вторая на D: ). В таких случаях можно попробовать сделать вот что: остановить закачку этого файла (Ctrl+D, и там в списке его убрать, если он ещё там висит), после чего насильственно переименовать файл. Если к примеру это фильм, то даже отсутствие 200-300 кб не помешает. Но обычно при таких глюках файл таки докачивается полностью, просто почему-то DC++ не может его перенести. Но если после переименования файл не открывается -- лучше удалите его и перезакачайте заново.

Найдено и вроде бы опробировано решение проблемы: настроить папки incomplete и папки для закачек так, чтобы они ссылались на ОДИН И ТОТ ЖЕ раздел диска. Можно для простоты установить их на одну и ту же директорию.

Проблемы с доступом на ХАБ

Не могу зайти на хаб, пишет...

......, *** Connection timeout
Или хаб временно отключен, или у вас в данный момент сломалась сетка, или вы не разрешили ДС++ клиент в Файерволле.

...Connection refused by target machine(отказанно в доступе)
а) Ваш файерволл блокирует ДС клиент. Настройте или удалите его(обязательно перезагрузите комп после удаления)
б) Сервер где расположен хаб работает, но сам Хаб не включён.

...You are still temporary banned for another 00:05:00
Вас кикнули/забанили - хаб скажет, скока осталось до "автопрощения"

...Bad nickname. Nickname already in use (Ник уже занят)
Глюк ДС++.Значит что ваше имя уже используется на Хабе. Скорее всего это ваша "тень". Просто измените ник на "ВашНик1" и входите. Со временем "тень" исчезнет. (бывает если вы выключили

...Turn on your tags!
Ваш клиент отличен от оригинального ДС++, поэтому Хаб может не пускать его к себе. В настройках клиента найдите "емулировать(притвориться) стандартным клиентом ДС++"

Появляется сообщение типа "Active Search: Your ip is not 172.30.xxx.xx it is 144.76.94.14 bye bye." и отключает.

Это сообщение появляется когда ваш клиент посылает поисковый запрос в активном режиме, при этом он сообщает свой IP в запросе. И если этот IP отличается от того под которым вы реально подключаетесь к хабу, то тогда вы и получите это сообщение. Для того чтобы этого не происходило, убедитесь: После внесения изменений перезапустите клиента, проблемы быть не должно.

DC++ и Windows Vista

Поскольку в Windows Vista был введен механизм защиты файлов в директориях "Program Files", клиенты DC++ не могут изменить свой конфиг для корректной работы. Это вызывает зависание и глюки.

Для корректной работы запускайте клиент с привилегиями администратора:

Щелкните правой кнопкой по ярлыку клиента, выберите свойства:

Перейдите на вкладку совместимость, и выставите флажок в поле "Запускать от администратора":


Краткая инструкция о процессе скачивания фильмов с film.2kom.ru


В появившемся окне вы можете выбрать:

  • Начать поиск этого файла
  • Добавить этот файл в очередь

Если Вы укажете "Начать поиск этого файла", то будет произведен поиск по пользователям, которые сейчас подключенны к серверу. Но так как файл может находиться у пользователей, которые сейчас не подключены к серверу, то реккомендуем выбирать "Добавить этот файл в очередь". Тогда файл добавиться к Вам в очередь и скачивание начнется сразу, как только пользователь имеющий этот файл пояаится в сети.

Если у вас возникают проблемы с закачкой или поиском файлов (вроде, всё делаете как надо, а ничего не качается или поиск выдаёт пустой список), уясните себе, что хаб DC (сервер) тут совершенно не при чем. Передача файлов происходит напрямую от клиента к клиенту, поэтому помехи могут быть только на пути между клиентами.

Симптомы обычно такие: вы ставите файл (или список файлов) на закачку, ждёте, ждёте, ... а ничего не происходит, а потом DC пишет про "таймаут соединения":

Помните, что правильная настройка самого DC-клиента ещё не означает правильной настройки системы, сети и других приложений, которые могут влиять на DC++.

Вариантов проблем тут по сути всего три (первый - наиболее частый):

  • Неправильно настроен межсетевой экран (файерволл, брэндмауэр, антивирус или любое другое средство сетевой защиты) у вас или у другого пользователя, и он просто блокирует сетевое соединение. в этом случае внимательно читайте данную страницу.
  • Неправильно настроен DC-клиент у вас (или у того, у кого вы качаете файлы). Возможны случаи, когда вы при неверных настройках системы, сетевых экранов и т.д. вы можете что-то скачать у другого юзера, а он у вас - нет. Рекомендуем ещё раз ознакомиться с разделом настройки DC-клиента . Если не качается вообще ни у кого, значит скорее всего проблема именно у вас, а не у других.
  • Соединение по локальной сети между двумя данными пользователями (или сегментами сети) заблокировано провайдером. В этом случае повлиять на ситуацию Вы не можете, просто считайте что данный юзер вам недоступен и воспринимайте это как данное свыше.

Правильные сетевые настройки DC-клиента

Если у вас не прямое подключение компьютера к сети, а через роутер (маршрутизатор), то настройки могут отличаться. А если у вас провод от провайдера втыкается прямо в комп, то проверьте, что у вас включен активный режим передачи файлов (Файл - Настройки - Настройки соединения ):



Остальные настройки DC++ на сетевые соединения никак не влияют. Так что если у вас тут всё выбрано как на картинке, значит проблема наверняка не в настройка клиента (то есть, читайте дальше).

Межсетевые экраны, антивирусы и их влияние на работу DC++

Ниже перечислено то, что может отрицательно влиять на работу DC++.

  • Программные firewall-ы (фаерволлы, брендмауэры, межсетевые экраны) - программы для защиты от атак из сети.
  • Брендмауэр Windows.
  • Анти-вирусы, анти-руткиты и прочие аналогичные программы
  • Аппаратные firewall-ы - "железная" сетевая защита, встроенная в сетевые платы и т.д.

Если вы не знаете, что это такое, ниже приведен перечень популярных программ такого типа:
Антивирусы : Касперский (Антивирус, АнтиХакер, Internet Security), Eset NOD32, Symantec (Norton AntiVirus, Internet Security), Trend PC-Cillin, Avira Avast, DrWeb, McAfee Antivirus, Panda.
Firewall-ы : Outpost, WinGate, UserGate, WinProxy, WinRoute, ZoneAlarm, Comodo.
Что же касается аппаратных firewall-ов, пока нам известен только nVidia firewall , встроенный в материнские платы на чипсетах nVidia N-Force . Как его отключить читайте руководство по материнской плате.

Как быть, если у вас есть перечисленные программы или им аналогичные? Для начала вы можете попробовать полностью их отключить или настроить так, чтобы они не блокировали сетевые соединения (либо совсем все, либо те, которые создаются приложением DC++. Даже если вы боитесь отключать защиту - вы можете сделать это временно и проверить, что причина того, что DC++ не работает, была именно в данной программе. Причем подойдите к вопросу творчески, поэкспериментируйте с настройками вашего фаерволла или антивируса и добейтесь того, чтобы он не блокировал DC.

К сожалению, опыт говорит о том, что такие антивирусы, как NOD32 и Norton (Symantec) Internet Security обладают следующим неприятным свойством: даже полное их отключение (а в некоторых случаях - деинсталляция) на самом деле полным не является и всё равно создаёт помехи в работе DC++. Способов борьбы с этим (кроме самых радикальных вроде переустановки чистой системы) нам пока неизвестно. Причины кроются в некорректной работе этих программ и/или их деинсталляторов, повлиять на которые у пользователя возможности нет.

Для подключения к хабу в DC++ обычно используется 411 TCP-порт (зависит от настроек самого хаба, но на большинстве хабов он именно такой). В активном режиме DC++ использует многие порты для соединений с юзерами; в режиме ручного перенаправления - только тот порт, который указан в настройках.

Если НИЧЕГО из перечисленного не помогает:

Остаются только радикальные меры: переустановить "чистую" винду без лишних программ защиты. Многим пользователям оно кстати совершенно не повредит. Поверьте, потратить даже три часа на полную переустановкиу системы - это быстрее, чем три дня искать причину неработоспособности чёрт знает в какой программе. При том не советуе пользоваться "самосборками" Windows - они тоже бывают весьма "кривые", и гарантировать бесперебойную работу DC на этих системах вам никто не будет (благо опять-таки, есть печальный опыт наступания пользователей на эти грабли).



Разумеется, те же самые 2 порта (2000 TCP и 2000 UDP) должны быть разрешены на вход/выход в настройках фаерволла.

Подробное описание многих файрволлов (немного старое, но не потерявшее актуальности) и их настройки есть .

Настройка брэндмауэра Windows

Встроенная сетевая защита ОС Windows XP SP2, Windows 2003, Windows Vista настраивается достаточно просто - достаточно добавить FlyLinkDC.exe в список исключений брендмауэра. Обычно при первом запуске DC++ система спросит вас, разрешать или не разрешать соединения:



В Vista сообщение выглядит иначе:



Нажимаете кнопку Unblock (Разрешить ). Тем самым вы добавите DC++ в список исключений. Если вы этого не сделали при первом запуске, можете сделать это в лббой момент: зайдите в Панель управления/Control Panel, Центр обеспечения безопасности/Windows Security Center, Брэндмауэр/Windows Firewall - и там на вкладке "Исключения" добавьте FlyLinkDC.exe . Вот соответствующие картинки: (нажмите на них для увеличения):

После этого всё должно работать.