Задать вопрос
@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))
			}


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

Зарание спасибо.
  • Вопрос задан
  • 293 просмотра
Подписаться 5 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Go-разработчик с нуля
    9 месяцев
    Далее
  • Яндекс Практикум
    Go-разработчик с нуля
    8 месяцев
    Далее
  • OTUS
    Golang Developer. Professional
    5 месяцев
    Далее
Решения вопроса 1
GRbit
@GRbit
Linux, гитара, паяльник
Вы уверены что всё правильно проверяете? Конечно способ не закрывать соелинение не очень правильный, но должно работать. Пример почти 1в1 из документации к net.Listener, должно работать.

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

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

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