я вот думаю избавиться от буффера и завернуть обработку трафика в reader/writer. но получив трафик, мне нужно знать размер TCP пакета. а как это сделать в reader/writer - хз.
коллеги, а как TCP соединение понимает, что на вход получено N байт? предположим у нас есть:
buf := make([]byte, 32) n, err := conn.Read(buf)
n, предположим, присвоено 20. а err == nil. по какому принципу чтение прекратилось? почему не дожитается всех 32 байт?
потому что в ядре сокет имеет пару буферов(для чтения и записи, регулируются через setsockopt SO_RCVBUF/SO_SNDBUF). Когда вы зовёте read/recv в предоставленный буфер данные копируются. Если в ядре непрочитанных данных больше чем буфер что вы предоставили - вам положат что есть
я вот думаю избавиться от буффера и завернуть обработку трафика в reader/writer. но получив трафик, мне нужно знать размер TCP пакета. а как это сделать в reader/writer - хз.
без разницы как оно называется. главное что от буфера типа []byte не избавиться? и переписать все на reader/writer не получится, если в пакет нужно преобразовать.
без разницы как оно называется. главное что от буфера типа []byte не избавиться? и переписать все на reader/writer не получится, если в пакет нужно преобразовать.
в какой пакет? необходимость предоставлять буфер сделана умышленно
без разницы как оно называется. главное что от буфера типа []byte не избавиться? и переписать все на reader/writer не получится, если в пакет нужно преобразовать.