From 4268ee9909e8057fa6de37620032945c9edc81d7 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 10 Dec 2025 18:33:37 +0200 Subject: [PATCH] gotd/transport: add default read/write deadlines --- pkg/gotd/transport/connection.go | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/pkg/gotd/transport/connection.go b/pkg/gotd/transport/connection.go index 1d4fbf5f..668603a9 100644 --- a/pkg/gotd/transport/connection.go +++ b/pkg/gotd/transport/connection.go @@ -29,19 +29,23 @@ type connection struct { writeMux sync.Mutex } +var ( + DefaultWriteDeadline = 1 * time.Minute + DefaultReadDeadline = 2 * time.Minute +) + // Send sends message from buffer using MTProto connection. func (c *connection) Send(ctx context.Context, b *bin.Buffer) error { // Serializing access to deadlines. c.writeMux.Lock() defer c.writeMux.Unlock() - if err := c.conn.SetWriteDeadline(time.Time{}); err != nil { - return errors.Wrap(err, "reset write deadline") + deadline, ok := ctx.Deadline() + if !ok { + deadline = time.Now().Add(DefaultWriteDeadline) } - if deadline, ok := ctx.Deadline(); ok { - if err := c.conn.SetWriteDeadline(deadline); err != nil { - return errors.Wrap(err, "set write deadline") - } + if err := c.conn.SetWriteDeadline(deadline); err != nil { + return errors.Wrap(err, "set write deadline") } if err := c.codec.Write(c.conn, b); err != nil { @@ -57,13 +61,12 @@ func (c *connection) Recv(ctx context.Context, b *bin.Buffer) error { c.readMux.Lock() defer c.readMux.Unlock() - if err := c.conn.SetReadDeadline(time.Time{}); err != nil { - return errors.Wrap(err, "reset read deadline") + deadline, ok := ctx.Deadline() + if !ok { + deadline = time.Now().Add(DefaultReadDeadline) } - if deadline, ok := ctx.Deadline(); ok { - if err := c.conn.SetReadDeadline(deadline); err != nil { - return errors.Wrap(err, "set read deadline") - } + if err := c.conn.SetReadDeadline(deadline); err != nil { + return errors.Wrap(err, "set read deadline") } if err := c.codec.Read(c.conn, b); err != nil {