На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Winsock2 -ошибка 10038 , select с не-сокетом
    Привет всем.
    У меня в основном потоке идёт приём сокетов. Потом сокет (как int) кладётся в буфер.
    А потом берётся из буфера принимающем потоке. При этом в принимающем потоке активно пользуется select (см статью Считывание данных из сокета).
    И вот что я вижу сегодня: Winsock2 error - 10038. Если проще - то попытка select-ить невалидный сокет. Или вообще не-сокет. Сытранно всё это. closesocket мой процесс не делал. А 4-х байтовый описатель системного ресурса вдруг стал невалидным.

    Решил подтвердить свою чёрную догадку - проверил на валидность сокета. Действительно - сокет стал инвалидом. И кто это его подрихтовал? Только что живой был, accept-ился нормально, даже в логах запись осталась - вот такой то сокет, принят тогда то, ... , и вдруг :tank:

    Я бы не очень рассраивался, если бы это произошло 1 раз. Дык происходит каждый (приблизительно) пятый раз.

    Есть ли у кого нибудь идеи, как защитить моего зверька-сокета от вредных дядей? (хм, возможно, дяди пришли из других процессов, а откуда ещё? - я то ведь closesocket не говорил?!).

    Спасибо за внимание.
      AQL, а не ты тот самый вредный дядя? Красочное описание канечна хорошо, ты кодом делись.... ;)
        А то что ты подпихиваешь в fd_set, похоже на хэндл сокета или нет?
          Всё похоже и всё работает. В 80% случаях.
          Кстати - код приведён в моей статье в ФАК-е: Считывание данных из сокета.. (там чуть обрезана обработка ошибок).
          Единственное, чего там нет: это как я accept-ю, но там ошибиться сложно.
          Потом int кладётся в std::deque() и вынимается принимающим потоком.
          Сообщение отредактировано: AQL -
            а может кто-то на другой стороне закрыл соединение..

            сокет опятьже станет инвалидным т.к. пришло сообщение FD_CLOSE от другой стороны..

            то, что ты его не закрывал вручную ещё ни о чем не говорит..
              Цитата
              Muran, 24.05.04, 17:40
              а может кто-то на другой стороне закрыл соединение

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


              Рейтинг@Mail.ru
              [ Script execution time: 0,0219 ]   [ 16 queries used ]   [ Generated: 26.09.24, 23:51 GMT ]