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" "context"
"errors" "errors"
"net" "net"
"time"
"github.com/quic-go/quic-go" "github.com/quic-go/quic-go"
@ -11,16 +12,18 @@ import (
"github.com/anyproto/any-sync/net/transport" "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()) cctx = peer.CtxWithPeerAddr(cctx, transport.Quic+"://"+qconn.RemoteAddr().String())
return &quicMultiConn{ return &quicMultiConn{
cctx: cctx, cctx: cctx,
Connection: qconn, Connection: qconn,
writeTimeout: writeTimeout,
} }
} }
type quicMultiConn struct { type quicMultiConn struct {
cctx context.Context cctx context.Context
writeTimeout time.Duration
quic.Connection quic.Connection
} }
@ -39,9 +42,10 @@ func (q *quicMultiConn) Accept() (conn net.Conn, err error) {
return nil, err return nil, err
} }
return quicNetConn{ return quicNetConn{
Stream: stream, Stream: stream,
localAddr: q.LocalAddr(), localAddr: q.LocalAddr(),
remoteAddr: q.RemoteAddr(), remoteAddr: q.RemoteAddr(),
writeTimeout: q.writeTimeout,
}, nil }, nil
} }
@ -84,6 +88,7 @@ const (
type quicNetConn struct { type quicNetConn struct {
quic.Stream quic.Stream
writeTimeout time.Duration
localAddr, remoteAddr net.Addr localAddr, remoteAddr net.Addr
} }
@ -98,6 +103,15 @@ func (q quicNetConn) Close() error {
return q.Stream.Close() 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 { func (q quicNetConn) LocalAddr() net.Addr {
return q.localAddr 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 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) { func (q *quicTransport) acceptLoop(ctx context.Context, list *quic.Listener) {
@ -199,7 +199,7 @@ func (q *quicTransport) accept(conn quic.Connection) (err error) {
}() }()
return return
} }
mc := newConn(cctx, conn) mc := newConn(cctx, conn, time.Second*time.Duration(q.conf.WriteTimeoutSec))
return q.accepter.Accept(mc) return q.accepter.Accept(mc)
} }