На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
  
    > SO_RCVTIMEO
      Странное поведение данной опции.
      если я выставляю

      ExpandedWrap disabled
        struct timeval tv = {10, 0};


      то тайм-аут срабатывает (хотя раньше чем 10 сек. - почти сразу)

      Но если мне нужно всего 100 мс
      ExpandedWrap disabled
        struct timeval tv = {0, 100 * 1000};


      то висит на recv.

      В чем прикол ?
      Сообщение отредактировано: zss -
        код то покажи, не жадничай.
          Цитата Adil @
          код то покажи, не жадничай.

          ну примерно так

          ExpandedWrap disabled
            struct timeval time = {0, 100 * 1000};
            if (setsockopt (sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&time, sizeof(time)) == SOCKET_ERROR)
            {
               ...
            }
              Сокет блокирующий?

              P.S. Как народ вообще приложения отлаживает, - не понимаю. Ну, не заработал какой-то вызов. Ну, создай маленькое консольное приложение с проблемным кодом, по-тестируй. И тут что-то приличное можно будет выложить, что б людям не приходилось по кусочку выпытывать. :whistle:


              А почему бы обычный способ - через select - не использовать? Ибо
              Цитата POSIX man setsockopt
              Note that not all implementations allow this option to be set.


              Добавлено
              Кстати, что у тебя за ОСь? Под виндой надо вовсе не timeval передавать. У них всё через (_|_). Там
              Цитата MSDN
              ExpandedWrap disabled
                Value       Type Meaning
                SO_RCVTIMEO int  Receives time-out in milliseconds (available in the Microsoft implementation
                                  of Windows Sockets 2).
              Т.е. нужно передавать обычный int в миллисекундах. :) Вот почему у тебя 10 сразу выскакивала - через 10 мс.
                Цитата Adil @
                Т.е. нужно передавать обычный int в миллисекундах. :) Вот почему у тебя 10 сразу выскакивала - через 10 мс.

                ааааааа....
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0235 ]   [ 16 queries used ]   [ Generated: 10.05.24, 05:27 GMT ]