select() ругается

Тема в разделе "WASM.NETWORKS", создана пользователем s3dworld, 19 сен 2011.

  1. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Всем доброго вечера!

    Делаю вот так:

    Код (Text):
    1. FD_ZERO(&fdsRead);
    2. FD_ZERO(&fdsWrite);
    3. FD_SET(listener,&fdsRead);
    4.  
    5. for(playerIndex=0;playerIndex<players.size();playerIndex++)
    6. {
    7.     FD_SET(players[playerIndex].entitySocket,&fdsRead);
    8.     FD_SET(players[playerIndex].entitySocket,&fdsWrite);
    9. }
    10.  
    11. selectResult=select(0,&fdsRead,&fdsWrite,0,&timeValue);
    Когда нет клиентов, то есть выполняется только для слушающего сокета listener, то ошибок нет. Вот подключился клиент и уже его сокет берётся из players. Функция select() возвращает ошибку, что я пытаюсь выполнить операцию не над сокетом. Проверяю в режиме отладки. accept() возвращает тот же номер сокета, что я ложу в fdsRead с fdsWrite. Тогда в чём же дело?
     
  2. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Разобрался сам. Получалось что добавление нового экземпляра в вектор, вызывался конструктор копирования и после срабатывал деструктор, в котором вызывалось closesocket().
     
  3. Smile

    Smile New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2004
    Сообщения:
    129
    вектор+хранение по значению = меняюшиеся индексы, битые указатели, боль...

    Лучше сразу отдели игровую логику от сетевой части и свяжи через идентификаторы.
    Вектор замени на map<ID,Player*>, будешь по id сообшения не только от сети получать но и от других подсистем.

    Вообше, для игры использовать tcp не тру, если конечно ты не пошаговую пишешь или поинтклик ... омеге ты пишешь мморпг ? )))
     
  4. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Smile
    Платформер, сетевой Марио.
     
  5. Smile

    Smile New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2004
    Сообщения:
    129
    О, круто, гл.

    По лану должно нормально быть