Обновил библиотечку сниппетов
Dec. 10th, 2024 06:14 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Чуть ли не с месяц назад сделал конкретный рефакторинг и багфикс моей библиотечки сниппетов. А сегодня вроде бы добил добавление простого сетевого функционала (tcp INET и UNIX сокеты) — сколько ж можно один и тот же код годами копипастить из проекта в проект? Еще и обработчик команд клиента "встроенный" сделал. С реакцией на команду "help" (точно так же, как в микроконтроллерах, выводится перечень команд со справкой). Пока отлаживал, заметил маленький баг в парсере key/value (если в строке был только "ключ", то последний символ обрезался), исправил.
С поллингом разрывался: сначала скопировал код с poll, потом подумал, и начал на select переделывать (думал, что это не потребует двигать туда-сюда громадные вложенные структуры, если клиент закрылся). Однако, не понравилось мне там то, что нужно считать вплоть до максимально имеющегося файлового дескриптора, а как его узнать? Количество клиентов у меня всегда ограничено числом, куда меньшим, чем предельное количество открытых fd. Но зато с select не нужно было бы структуры туда-сюда двигать. Однако, таки вернулся к poll. И если отключился единственный или же последний клиент - только изменяю количество подключенных, иначе же после закрывания текущего, меняю его местами с последним подключенным. В итоге цикл всегда идет по N+1 (N - количество подключенных, 1 - дескриптор слушающего сокета).
Надо завтра еще хорошенько поотлаживать при разных условиях. Уж больно странно, что оно у меня за полчаса "взлетело". Обычно после недели кодописания баги еще пару-тройку дней вылавливаешь.
С поллингом разрывался: сначала скопировал код с poll, потом подумал, и начал на select переделывать (думал, что это не потребует двигать туда-сюда громадные вложенные структуры, если клиент закрылся). Однако, не понравилось мне там то, что нужно считать вплоть до максимально имеющегося файлового дескриптора, а как его узнать? Количество клиентов у меня всегда ограничено числом, куда меньшим, чем предельное количество открытых fd. Но зато с select не нужно было бы структуры туда-сюда двигать. Однако, таки вернулся к poll. И если отключился единственный или же последний клиент - только изменяю количество подключенных, иначе же после закрывания текущего, меняю его местами с последним подключенным. В итоге цикл всегда идет по N+1 (N - количество подключенных, 1 - дескриптор слушающего сокета).
Надо завтра еще хорошенько поотлаживать при разных условиях. Уж больно странно, что оно у меня за полчаса "взлетело". Обычно после недели кодописания баги еще пару-тройку дней вылавливаешь.