Значение ~0 зависит от типа. Двоичное представление у него в виде всех единиц: для знакового это будет соответствовать -1, для беззнакового максимальное допустимое значение.
Уже ответили что в винде не -1. Товарищи, разрабатывающие pvs studio пишут про эту ошибку чуть ли не в каждой статье.
К тому же в MSDN вполне чёрным по белом что ошибка функции accept это именно INVALID_SOCKET, а не что-то другое. И именно на него надо проверять если нет желания когда-то потом мучаться с совместимостью и переносимостью кода.
Стоило хотя бы упомянуть что код ошибки стоит проверять что это действительно всё ок для неблокирующего вызова. Это всего пара лишних макросов чтобы свести к единому виду, можно даже было бы привести в статье.
Вы же сами ответили:
Я в примерах вижу в цикле вызывает accept без каких либо других действий внутри цикла. А обработка коннекта идёт после выхода из него.
Чем это отличается блокирующего вызова кроме ухудшения производительности из-за слипа?
Должно быть примерно так всё же:
while(1) {
accept
...
// делаем что-то там нам нужное со старыми открытыми коннектами или с новым
}
...
// закрваем сокеты
Вместо дескриптора сокета accept теперь вернет значение (-1).
Вы же кроссплатформенный код пишите, нельзя так делать. accept возвращает -1 в никсах, а в винде она возращает INVALID_SOCKET который ещё надо проверить и убедиться что там WSAEWOULDBLOCK, а не ошибка.
И немного не понял смысл замены блокирующего вызова на зацикленный неблокирующий.
Неблокирующий сокет нужен для обработки циклом клиентов и приёма новых конектов в одной ните, вместо разнесения этих операций по разным нитям.
Было бы неплохо. Играешь под свою музыку, тут сюжетное видео какое-нить начинается — плеер сам ставит паузу или заметно снижает громкость. Ты без лишних тыканий по хоткеем для плеера и уж тем более без сворачивания игры смотришь видео и потом всё назад включается.
Вы как первый день живёте. Всё что не шибко крупное обычно всё регистрируется на ответственного за это дело сотрудника или начальника какого-нить, который через неделю может уволиться. Тут видимо такой же случай.
Кстати, существует какая-то нормативка на регистрацию официальных сайтов гос органов?
Было бы желание.
Если не ошибаюсь то все платежи в системе любой может просмотреть? Вот кто хочет регистрирует себе кошелёк в налоговой, и всегда можно будет посмотреть сколько бабла надо стрясти и затребовать отчёт кто и за что переводил на кошелёк для проверок на финансирование терроризма.
Но зачем оно им надо если курс не контролируют и вообще пока не готовы к таким валютам?
Почитай внимательно, из 7к+ игроков поучаствовавших в битве одновременно онлайн было две с половиной тыщи. Хотя наверняка были и те кто провёл весь бой в онлайне.
Лучше 1 сек за 10, чем краш сервера и вообще никакой битвы.
Никакого холивара. Я высказал своё мнение что си был бы полезнее в дальнейшем схожестью с современными языками.
Как уже сказали выше сложность зависит от преподавателя.
Си разве появился намного позже паскаля? Скорее действительно дело в том что «В педвузах чаще преподавали» и наличии обучающего материала.
И я не согласен что для начального обучения программированию все 3 вышеуказанных языка — прошлое. На яве или плюсах сразу чтоли учить писать?
За этим заканчиваю обсуждение.
Разницу между -1 и ~0 надеюсь объяснять не надо?
К тому же в MSDN вполне чёрным по белом что ошибка функции accept это именно INVALID_SOCKET, а не что-то другое. И именно на него надо проверять если нет желания когда-то потом мучаться с совместимостью и переносимостью кода.
Стоило хотя бы упомянуть что код ошибки стоит проверять что это действительно всё ок для неблокирующего вызова. Это всего пара лишних макросов чтобы свести к единому виду, можно даже было бы привести в статье.
Я в примерах вижу в цикле вызывает accept без каких либо других действий внутри цикла. А обработка коннекта идёт после выхода из него.
Чем это отличается блокирующего вызова кроме ухудшения производительности из-за слипа?
Должно быть примерно так всё же:
Вы же кроссплатформенный код пишите, нельзя так делать. accept возвращает -1 в никсах, а в винде она возращает INVALID_SOCKET который ещё надо проверить и убедиться что там WSAEWOULDBLOCK, а не ошибка.
И немного не понял смысл замены блокирующего вызова на зацикленный неблокирующий.
Неблокирующий сокет нужен для обработки циклом клиентов и приёма новых конектов в одной ните, вместо разнесения этих операций по разным нитям.
Кстати, существует какая-то нормативка на регистрацию официальных сайтов гос органов?
Если не ошибаюсь то все платежи в системе любой может просмотреть? Вот кто хочет регистрирует себе кошелёк в налоговой, и всегда можно будет посмотреть сколько бабла надо стрясти и затребовать отчёт кто и за что переводил на кошелёк для проверок на финансирование терроризма.
Но зачем оно им надо если курс не контролируют и вообще пока не готовы к таким валютам?
платит налогиделится.Лучше 1 сек за 10, чем краш сервера и вообще никакой битвы.
Как только найдут способ иметь с этого деньги так обязательно разрешат.
Ещё файлик атачить можно было бы…
www.unrealengine.com/html5/
Как уже сказали выше сложность зависит от преподавателя.
И я не согласен что для начального обучения программированию все 3 вышеуказанных языка — прошлое. На яве или плюсах сразу чтоли учить писать?