1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-08 05:57:03 +09:00

quic write deadline

This commit is contained in:
Sergey Cherepanov 2025-03-26 11:30:29 +01:00
parent 0d0257bbd0
commit ea4248a51d
No known key found for this signature in database
GPG key ID: 87F8EDE8FBDF637C
2 changed files with 23 additions and 9 deletions

View file

@ -4,6 +4,7 @@ import (
"context"
"errors"
"net"
"time"
"github.com/quic-go/quic-go"
@ -11,16 +12,18 @@ import (
"github.com/anyproto/any-sync/net/transport"
)
func newConn(cctx context.Context, qconn quic.Connection) transport.MultiConn {
func newConn(cctx context.Context, qconn quic.Connection, writeTimeout time.Duration) transport.MultiConn {
cctx = peer.CtxWithPeerAddr(cctx, transport.Quic+"://"+qconn.RemoteAddr().String())
return &quicMultiConn{
cctx: cctx,
Connection: qconn,
cctx: cctx,
Connection: qconn,
writeTimeout: writeTimeout,
}
}
type quicMultiConn struct {
cctx context.Context
cctx context.Context
writeTimeout time.Duration
quic.Connection
}
@ -39,9 +42,10 @@ func (q *quicMultiConn) Accept() (conn net.Conn, err error) {
return nil, err
}
return quicNetConn{
Stream: stream,
localAddr: q.LocalAddr(),
remoteAddr: q.RemoteAddr(),
Stream: stream,
localAddr: q.LocalAddr(),
remoteAddr: q.RemoteAddr(),
writeTimeout: q.writeTimeout,
}, nil
}
@ -84,6 +88,7 @@ const (
type quicNetConn struct {
quic.Stream
writeTimeout time.Duration
localAddr, remoteAddr net.Addr
}
@ -98,6 +103,15 @@ func (q quicNetConn) Close() error {
return q.Stream.Close()
}
func (q quicNetConn) Write(b []byte) (n int, err error) {
if q.writeTimeout > 0 {
if err = q.Stream.SetWriteDeadline(time.Now().Add(q.writeTimeout)); err != nil {
return
}
}
return q.Stream.Write(b)
}
func (q quicNetConn) LocalAddr() net.Addr {
return q.localAddr
}

View file

@ -147,7 +147,7 @@ func (q *quicTransport) Dial(ctx context.Context, addr string) (mc transport.Mul
return nil, err
}
return newConn(cctx, qConn), nil
return newConn(cctx, qConn, time.Second*time.Duration(q.conf.WriteTimeoutSec)), nil
}
func (q *quicTransport) acceptLoop(ctx context.Context, list *quic.Listener) {
@ -199,7 +199,7 @@ func (q *quicTransport) accept(conn quic.Connection) (err error) {
}()
return
}
mc := newConn(cctx, conn)
mc := newConn(cctx, conn, time.Second*time.Duration(q.conf.WriteTimeoutSec))
return q.accepter.Accept(mc)
}