Задать вопрос
@vGrabko99
html, css, js, php, golang, mysql

Как ждать новых данных, а не закрывать соединение?

Привет. Разбираюсь я с написанием tcp демонов. Вот с помощью доков сделал простенький код
package main

import (
	"fmt"
	"log"
	"net"
)

func main() {
	l, err := net.Listen("tcp", ":2000")
	if err != nil {
		log.Fatal(err)
	}
	defer l.Close()
	for {
		conn, err := l.Accept()
		if err != nil {
			log.Fatal(err)
		}
		go func(c net.Conn) {
			buf := make([]byte, 1024)
			c.Read(buf)
			fmt.Print(string(buf))

			c.Close()
		}(conn)
	}
}

Здесь после каждого сообщения соединение закрывается. Я в инетах так и не нашел объяснения о том как закрыть соединение не сразу, а через некоторый промежуток времени. (к примеру не приходили данный 20сек то закрываем соединение).
Решено
buf := make([]byte, 1024)
			for {
				c.Read(buf)
				fmt.Print(string(buf))
			}


Я могу убрать закрытие соединения. Но не могу понять, а как постоянно ждать новые сообщения? А то после первого смс следующие в терминал не попадают.

Зарание спасибо.
  • Вопрос задан
  • 290 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
GRbit
@GRbit
Linux, гитара, паяльник
Вы уверены что всё правильно проверяете? Конечно способ не закрывать соелинение не очень правильный, но должно работать. Пример почти 1в1 из документации к net.Listener, должно работать.

На счёт таймаута, у соединения (net.Conn) можно задать дедлайн методом "SetReadDeadline(t time.Time) error". Для других случаев есть универсальный пакет sync
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы