Как стать автором
Обновить

Комментарии 20

Если мне что-то и запомнилось из статей о PVS Studio, так это то, что на винде socket возвращает unsigned int, соответственно сравнение <= 0 не совсем корректно.
В комментариях к исходной статье тоже заметили это. Автор пообещал исправить аж в декабре 2008 года, но так и не сделал:)
Не просто правильнее, а это единственно верное решение, поскольку магические числа, даже 0, использовать нельзя.
А что мешает использовать Boost.Asio если ЯП C++? Ну или уже готовые обертки? Кстати, по мне так красивше не делать портянки макросов, а просто делать файлы типа feature_mac.cpp, feature_windows.cpp, feature_linux.cpp и подключать соответственно один из этих файлов.
Ну это все-таки обучающий материал. Написав один раз самостоятельно, начинаешь лучше понимать, что происходит внутри.
Да и в по-настоящему кросс-платформенные FPS (у которых портирование сводится к перекомпиляции) я как-то слабо верю. Это ж, как-никак, клиент, на QT его писать, что ли?
А он разве настолько кроссплатформенный, что один и тот же сорс «мейкай» — и будет счастье? Если да (а не разные бранчи + еще разные сторонние библиотеки + танцы с бубном) — его разработчики круты до нереальности.
Я, если честно, «не настящий сварщик» — не из геймдева, а больше по серверам, но портинг Win->Линух делал не раз — даже там геморрой со сборкой (при том, что ACE и Boost как раз в себе все злые макросы для кроссплатформенности имеют — до полной ничетабельности кода).
Я, честно говоря, не писал на c++, но разве связки стандартной библиотеки + opengl недостаточно для клиента? Насколько я понимаю, при этом единственный код, который будет зависеть от платформы — это создание окна икры и перехват пользовательского ввода (клавиатура, мышь).
я думаю, полноценный клиент многопользовательской игры на уровне продакшена (не «курсовая на коленке») требует много всего — начиная от хитрой платформо-зависимой инсталяции и заканчивая разными плюшками типа «поддержка драйвера устойства USB-АКМ47»
НЛО прилетело и опубликовало эту надпись здесь
А почему бы вместо следующего
    unsigned int a = 207;
    unsigned int b = 45;
    unsigned int c = 186;
    unsigned int d = 98;
    unsigned int destination_address = ( a << 24 ) | ( b << 16 ) | ( c << 8 ) | d;
    address.sin_addr.s_addr = htonl( destination_address );

не использовать gethostbyname()?
gethostbyname() разве не другое делает?
есть функции inet_pton и inet_ntop
Да, пожалуй, inet_pton даже лучше подойдет. А gethostbyname возвращает указатель на структуру, из которой можно взять адрес. Ну и позволяет задавать адрес не только в виде IP.
Во многих фреймворках уже реализована кросплатформенная работа с сетью, так что далеко не всегда нужно писать свою реализацию абстракции. Из-за этого эта часть смотрится менее интересной. Но следующие будут интереснее (уже почитываю).
Статья о внутренностях, а не о применении фреймворков.
Я про это и говорю. Эта часть про внутренность протоколов, тем кто уже знает как работает TCP и UDP будет чуть менее интересно. Но следующие части будут про применение особых техник в мультиплеерных играх.
И нет особой разницы в применении средств фреймворка (тот же Boost.Asio, SDL_net) или описанной в этой части абстракции.
Так что нельзя говорить, что эту статью нельзя применять во фреймворках.
НЛО прилетело и опубликовало эту надпись здесь
Хм, тут один код как для яблока, так и для линукса, лишний дефайн нужен разве что для понятности
И я бы сделал на месте автора интерфейс для работы с инетом с реализацией работы как на винде, так и на линухе отдельно, без дефайнов — WindowsSocket и LinuxSocket на основе абстрактного класса Socket

Насколько я помню, я остался очень доволен сокетами в SFML, но руки не доходили посмотреть самому :) Да, они кроссплатформенные
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации