
Denis
22.03.2018
16:56:00
покажи класс свой

Stanislav
22.03.2018
16:57:40
там все сложно
но примерно так
class Manager
{
private:
Peer[ string ] peers; //тут ключ это адрес в string формате
public:
void listen( TCPConnection c )
{
try
{
if( to!string( c.peerAddress ) !in peers )
{
logInfo( "Got message from %s; no peer with that ip address.", c.peerAddress );
c.close();
}
}
}

Denis
22.03.2018
16:59:00
а там нет формата адресов отличного от строки?
в том фреймворке

Google

Stanislav
22.03.2018
16:59:42
в vibe-core? ну там зависит от адрес фэмили, вообще там union из ubyte[ ipv6_len ] и всех остальных )
кароче это не проблема в целом, еще 1 метод добавить, это думаю особенности posix, а не vibe-core
я просто условно буду добавлять пиров так
m.add_peer( "192.168.88.1", 65530 );
а можно так
m.add_peer( "2a02:aaaa:bbb:ccc::1", 65530 );

Denis
22.03.2018
17:01:58
лучше делай на ипв6 рассчитанное
оно рано или поздно случится

Stanislav
22.03.2018
17:02:06
правда ipv6 придется еще привести в полный формат
мне оба стека нужны)

Denis
22.03.2018
17:02:19
фишка в том что в ипв6 входят ипв4
т.е. тебе достаточно их уметь в любом случае

Stanislav
22.03.2018
17:03:34
это с точки зрения сокетов. а с точки зрения сети 2 несовместимых протокола
или может в ubyte[] вообще хранить, так лучше наверное будет

Denis
22.03.2018
17:05:49
не не лучше

Google

Denis
22.03.2018
17:05:56
идеально - в спецструктуре

Stanislav
22.03.2018
17:08:05
идеально - в спецструктуре
прост кажется как такое.. там структур в самом вайбда 1 есть для этого, потом есть системная структура sock_addr
и еще свою писать)

Denis
22.03.2018
17:09:06
максимально высокоуровневое юзай + не кипишуй раньше времени
хрен ты найдёшь без ипв6 машину

Stanislav
22.03.2018
17:09:57
не, если на машине нет в6 адреса, то и сокет будет же с фэмили af_inet

Denis
22.03.2018
17:10:16
не факт ну и ок, дальше?

Stanislav
22.03.2018
17:11:24
ну я распарсил конфиг, заполнил структуры с пирами. потом для удобства их по некому ключу в ассоциативный массив запихал.
вот ключ какой должен быть? должен ли он зависеть от того, есть ли на тачке в6 или нет?

Pavel
22.03.2018
17:18:21
Мне чет не очень нравится сама идея хранить адрес пира как строку

Stanislav
22.03.2018
17:19:07
мне тоже не особо, но она нужна 1 раз только при установке tcp сессии по сути. все равно городить отдельную структуру?

Pavel
22.03.2018
17:19:57
А вот как структуру - да. В нее инкапсулирована логика определения уникальности адреса. И тогда уже не важно ipv4 там, ipv6 там, unix сокет или что еще.

Denis
22.03.2018
17:20:48
у тебя отдельно ВХОДЯЩИЙ адрес и его ты раз устанавливаешь

Pavel
22.03.2018
17:20:48

Denis
22.03.2018
17:20:53
и отдельно твои клиенты
входящий хоть строка хоть что - пофиг
а клиентов адреса храни в ипв6
и тебе оно, вроде, нигде не аукнется

Stanislav
22.03.2018
17:22:51
ну ладно, убедили. надо делать структуру

Google

Pavel
22.03.2018
17:23:06
Ну лан может и норм
Почему не так?
Peer[TCPConnection] peers;

Denis
22.03.2018
17:24:29
опиши вообще что за сервер
что-то ты мудришь сильно

Pavel
22.03.2018
17:25:06
А, у тебя пир видимо может устанавливать несколько TCPConnection с твоим сервисом

Stanislav
22.03.2018
17:27:53
почему мудрю то.
вот дано - есть конфиг, там пользователь конечный прописывает адреса пиров, с которыми должен работать демон. пир идентефицируется только ip адресом (или ipv6).
он стартует, и слушает (для упрощения) определенный порт. когда приходит тцп коннект, он должен проверить - легитимное соединение (есть ли настроенный пир с таким адресом) и если да - то посылать некие данные перодически. если нелегитмное - сбросить соединение.

Denis
22.03.2018
17:29:15
список возможных пиров большой?

Pavel
22.03.2018
17:29:18
То есть для идентификации пира достаточно 4 байт ipv4

Stanislav
22.03.2018
17:29:22
несколько сотен
ipv6 тоже должен работать

Denis
22.03.2018
17:29:36
фильтровать пиры работа другого уровня OSI (который красноглазые отрицают, конечно)
ну и всё, конверти все адреса в ipv6 и слушай

Pavel
22.03.2018
17:30:15

Denis
22.03.2018
17:30:17
а на ипв4 забей

Pavel
22.03.2018
17:32:20
Тогда делаешь структуру PeerAddress с буфером 16 байт, и методы toIpv4() fromIpV4() и все что угодно там нужно для работы TCPConnection. Это и будет идентификатор пира.

Denis
22.03.2018
17:32:35

Pavel
22.03.2018
17:32:44
И массив Peer[PeerAddress]
16 байт структура. Это эссенция идентификатора :)
Либо так либо два ulong

Denis
22.03.2018
17:35:31
всёвычисляй в ипв6, а если попросят ипв4-онли - сделаешь версию компиляции

Google

Denis
22.03.2018
17:35:41
по скорости от перехода на ипв4 чистый ничего ты тут не выиграешь

Dark
22.03.2018
17:36:34
А если надо комбинировать?

Stanislav
22.03.2018
17:37:34
тут кароче еще если пир сам не подключается - надо к нему самому начать подключение) это второй шаг. и тут если пир ипв4 - то и адрес мне вернется уже нормальный

Pavel
22.03.2018
17:37:36
Если пришло соединение с адреса ipv6 такое же как и с адреса ipv4 то это один и тот же пир?

Stanislav
22.03.2018
17:37:59
кароче надо нормально работать с обоими стэками

Pavel
22.03.2018
17:39:28
То есть адреса с таким адресом никогда не могут прийти по реальному ipv6?

Stanislav
22.03.2018
17:39:30
ага

Admin
ERROR: S client not available

Pavel
22.03.2018
17:39:58
Ну тогда все надо в ipv6 вычислять )
И опять же это 16 байт )

Denis
22.03.2018
17:45:07

Stanislav
22.03.2018
17:47:14
я и так буду работать с в6) у меня вопрос как представить этот адрес внутри

Denis
22.03.2018
17:48:32
в виде ипв6, очевидно

Stanislav
22.03.2018
17:49:13
в общем я разобрался, спасибо всем)

Dark
22.03.2018
17:49:22
Даже мне?)

Denis
22.03.2018
17:52:02
ARCNET!
а это всё фигня
/me мечтает о всеобщем IPv6

Google

Dark
22.03.2018
18:01:18
/me тоже

Putch
22.03.2018
18:19:05
/me

Oleg
22.03.2018
18:22:06
/me
паразитная хуйня)
я теперь тоже мечтаю о IPv6

Ackeard
22.03.2018
18:44:53
/me
/menu@QuanBot

Oleg
22.03.2018
20:16:14
https://github.com/atilaneves/include
интересно выйдет ли у него

Denis
22.03.2018
20:18:36
Как это работает?

Dark
22.03.2018
20:27:21
Наверное, как и любой другой препроцессор

Valeriy
22.03.2018
20:33:31

Oleg
22.03.2018
20:35:04

Denis
22.03.2018
20:35:26
ещё бы такой парсер шаблонов для С++

Oleg
22.03.2018
20:36:28

Denis
22.03.2018
20:36:41
Этот знаю
но оно прибито к LDC

Valeriy
22.03.2018
20:37:09

Denis
22.03.2018
20:37:14
А расово-верно было бы запилить парсер шаблонов чтобы он мог генерить биндинги для любого языкка
swt вроде называется, есть такой