eddy_em: (Default)
[personal profile] eddy_em
Чуть ли не с месяц назад сделал конкретный рефакторинг и багфикс моей библиотечки сниппетов. А сегодня вроде бы добил добавление простого сетевого функционала (tcp INET и UNIX сокеты) — сколько ж можно один и тот же код годами копипастить из проекта в проект? Еще и обработчик команд клиента "встроенный" сделал. С реакцией на команду "help" (точно так же, как в микроконтроллерах, выводится перечень команд со справкой). Пока отлаживал, заметил маленький баг в парсере key/value (если в строке был только "ключ", то последний символ обрезался), исправил.
С поллингом разрывался: сначала скопировал код с poll, потом подумал, и начал на select переделывать (думал, что это не потребует двигать туда-сюда громадные вложенные структуры, если клиент закрылся). Однако, не понравилось мне там то, что нужно считать вплоть до максимально имеющегося файлового дескриптора, а как его узнать? Количество клиентов у меня всегда ограничено числом, куда меньшим, чем предельное количество открытых fd. Но зато с select не нужно было бы структуры туда-сюда двигать. Однако, таки вернулся к poll. И если отключился единственный или же последний клиент - только изменяю количество подключенных, иначе же после закрывания текущего, меняю его местами с последним подключенным. В итоге цикл всегда идет по N+1 (N - количество подключенных, 1 - дескриптор слушающего сокета).

Надо завтра еще хорошенько поотлаживать при разных условиях. Уж больно странно, что оно у меня за полчаса "взлетело". Обычно после недели кодописания баги еще пару-тройку дней вылавливаешь.

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 09:30 am
Powered by Dreamwidth Studios