На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Сокеты, 2 минуты
    Кто–нибудь сталкивался с проблемой, что сокет–клиент ровно через две минуты не может отправить данные на сервер. При этом не может определить, что коннект разорван (тут я ещё проверю)? Сервер под windows server 2003, клиент – ubuntu
      А может быть так, что буфер приёма сокета (на серверной стороне) или отправки переполнился?
        Фиревол хулиганит ?
        Можно попытаться посмотреть сниффером на пакеты обмена.
        Сообщение отредактировано: ЫукпШ -
          Цитата Flex Ferrum @
          А может быть так, что буфер приёма сокета (на серверной стороне) или отправки переполнился?


          Вряд ли. Тогда бы зависело от количества отправленных данных. А здесь - ровно 2 минуты.
          Когда send() возвращает количество меньшее, чем требовалось, я делаю poll() c POLLOUT. Никаких ошибок не возвращается.

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


          Цитата ЫукпШ @
          Фиревол хулиганит ?


          Админы уверяют, что нет там никакого фаервола. Я им, конечно, не верю, но это две виртуальные машины в одном ЦОДе.
            Подозреваю что на стороне сервера стоит автозакрытие сокета, по типу такого
            ExpandedWrap disabled
              sock_fd = Socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
              close_time = 120;
              Setsockopt(sock_fd, IPPROTO_SCTP, SCTP_AUTOCLOSE,
                &close_time, sizeof(close_time));
              Цитата A.I. @
              Подозреваю что на стороне сервера стоит автозакрытие сокета, по типу такого


              Такого кода там точно нет, сервер тоже мой. Да и в этом случае, думаю, клиент бы увидел, что сокет закрыт. А так - просто зависает и всё. Не может ничего отправить и не получает ошибки.
                1) Клиент теряет связь только на одном компе или на других тоже?
                2) Есть возможность вытащить с серверного приложения какую-нибудь отладочную инфу?
                3) А если телнетом вместо клиентского приложения подцепиться, тоже через 2 минуты обрыв?
                4) Обрыв через 2 минуты простоя или тупо обрыв?
                  А может просто протестировать каким-то другим софтом и тогда вероятно вопросы появятся к админам.
                    Цитата A.I. @
                    ) Клиент теряет связь только на одном компе или на других тоже?

                    Код работает везде одинаковый. Повторил только на этой паре. На других проверить тяжеловато, т.к. сервера боевые, но всё работает.

                    Цитата A.I. @
                    2) Есть возможность вытащить с серверного приложения какую-нибудь отладочную инфу?

                    Знать бы какую

                    Цитата A.I. @
                    3) А если телнетом вместо клиентского приложения подцепиться, тоже через 2 минуты обрыв?

                    Телнет вроде не зависает. Но там непонятно, нормальные данные не отправишь

                    Цитата A.I. @
                    4) Обрыв через 2 минуты простоя или тупо обрыв?

                    Ровно через 2 минуты send начинает возвращать 0, ошибок нет. Постоянно начитываю этот сокет, т.е. разрыв коннекта должен по-любому определится.
                      При запуске проги на другом линуксовом сервере, точно таком-же (во всяком случае, должен быть), не повторяется

                      Добавлено
                      admin@trading:/proc/sys/net/ipv4$ netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c
                      117 ESTABLISHED
                      6 LISTEN
                      5955 TIME_WAIT


                      TIME_WAIT - растёт
                        Кстати, а ты wireshark'ом не хочешь свои коннекты помониторить? Как дополнительное средство диагностики, так сказать.
                          # cat /proc/sys/net/ipv4/tcp_keepalive_time
                          # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
                          # cat /proc/sys/net/ipv4/tcp_keepalive_probes
                          что выставлено?

                          Добавлено
                          Цитата Flex Ferrum @
                          Кстати, а ты wireshark'ом не хочешь свои коннекты помониторить?

                          кстати да, было бы любопытно дампы глянуть
                            Смотрим через tcpdump. Через 2 минуты перестают приходить ответы от сервера. Вот этот момент

                            13:56:17.881906 IP 10.177.140.25.11250 > ntcpptest.39218: Flags [.], ack 1106507, win 64240, options [nop,nop,TS val 179205 ecr 243281], length 0
                            13:56:17.881913 IP ntcpptest.39218 > 10.177.140.25.11250: Flags [P.], seq 1106507:1106598, ack 1, win 229, options [nop,nop,TS val 243313 ecr 179205], length 91
                            13:56:18.081004 IP 10.177.140.25.11250 > ntcpptest.39218: Flags [.], ack 1106598, win 64149, options [nop,nop,TS val 179207 ecr 243313], length 0
                            13:56:18.081017 IP ntcpptest.39218 > 10.177.140.25.11250: Flags [P.], seq 1106598:1107180, ack 1, win 229, options [nop,nop,TS val 243363 ecr 179207], length 582
                            13:56:18.299888 IP 10.177.140.25.11250 > ntcpptest.39218: Flags [.], ack 1107180, win 63567, options [nop,nop,TS val 179209 ecr 243363], length 0

                            13:56:18.299896 IP ntcpptest.39218 > 10.177.140.25.11250: Flags [P.], seq 1107180:1108372, ack 1, win 229, options [nop,nop,TS val 243417 ecr 179209], length 1192
                            13:56:18.434448 IP ntcpptest.39218 > 10.177.140.25.11250: Flags [.], seq 1108372:1109820, ack 1, win 229, options [nop,nop,TS val 243451 ecr 179209], length 1448
                            13:56:18.635510 IP ntcpptest.39218 > 10.177.140.25.11250: Flags [.], seq 1109820:1111268, ack 1, win 229, options [nop,nop,TS val 243501 ecr 179209], length 1448
                            13:56:18.680848 IP ntcpptest.39218 > 10.177.140.25.11250: Flags [P.], seq 1107180:1108372, ack 1, win 229, options [nop,nop,TS val 243513 ecr 179209], length 1192

                            Добавлено
                            admin@trading:~/NetTrader/log$ sudo cat /proc/sys/net/ipv4/tcp_keepalive_probes
                            9
                            admin@trading:~/NetTrader/log$ sudo cat /proc/sys/net/ipv4/tcp_keepalive_intvl
                            75
                            admin@trading:~/NetTrader/log$ sudo cat /proc/sys/net/ipv4/tcp_keepalive_time
                            7200
                              Установил на сервере wireshark, не без труда - windows 2003 уже никто не хочет поддерживать.
                              Там через 2 минуты тупо перестаёт приходить что-либо.
                              Вообще не знаю что делать.
                                Олег М, на стороне сервера есть возможность что-то поставить?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0670 ]   [ 17 queries used ]   [ Generated: 29.03.24, 01:08 GMT ]