mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-09-26 18:51:13 +08:00
fix: rtsp client read timeout
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"net"
|
||||
"net/textproto"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const defaultBufSize = 1 << 14
|
||||
@@ -40,6 +41,34 @@ func NewBufReaderWithBufLen(reader io.Reader, bufLen int) (r *BufReader) {
|
||||
return
|
||||
}
|
||||
|
||||
// NewBufReaderWithTimeout 创建一个具有指定读取超时时间的 BufReader
|
||||
func NewBufReaderWithTimeout(conn net.Conn, timeout time.Duration) (r *BufReader) {
|
||||
r = &BufReader{
|
||||
Allocator: NewScalableMemoryAllocator(defaultBufSize),
|
||||
BufLen: defaultBufSize,
|
||||
feedData: func() error {
|
||||
// 设置读取超时
|
||||
if conn != nil && timeout > 0 {
|
||||
if err := conn.SetReadDeadline(time.Now().Add(timeout)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
buf, err := r.Allocator.Read(conn, r.BufLen)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
n := len(buf)
|
||||
r.totalRead += n
|
||||
r.buf.Buffers = append(r.buf.Buffers, buf)
|
||||
r.buf.Size += n
|
||||
r.buf.Length += n
|
||||
return nil
|
||||
},
|
||||
}
|
||||
r.buf.Memory = &Memory{}
|
||||
return
|
||||
}
|
||||
|
||||
func NewBufReaderBuffersChan(feedChan chan net.Buffers) (r *BufReader) {
|
||||
r = &BufReader{
|
||||
feedData: func() error {
|
@@ -39,12 +39,12 @@ func (r *RecyclableMemory) Recycle() {
|
||||
|
||||
func (r *RecyclableMemory) NextN(size int) (memory []byte) {
|
||||
memory = make([]byte, size)
|
||||
r.AppendOne(memory)
|
||||
r.PushOne(memory)
|
||||
return memory
|
||||
}
|
||||
|
||||
func (r *RecyclableMemory) AddRecycleBytes(b []byte) {
|
||||
r.AppendOne(b)
|
||||
r.PushOne(b)
|
||||
}
|
||||
|
||||
type MemoryAllocator struct {
|
||||
|
@@ -23,7 +23,7 @@ const Timeout = time.Second * 10
|
||||
func NewNetConnection(conn net.Conn) *NetConnection {
|
||||
return &NetConnection{
|
||||
Conn: conn,
|
||||
BufReader: util.NewBufReader(conn),
|
||||
BufReader: util.NewBufReaderWithTimeout(conn, Timeout),
|
||||
MemoryAllocator: util.NewScalableMemoryAllocator(1 << 12),
|
||||
UserAgent: "monibuca" + m7s.Version,
|
||||
}
|
||||
@@ -187,9 +187,6 @@ func (c *NetConnection) WriteRequest(req *util.Request) (err error) {
|
||||
}
|
||||
|
||||
func (c *NetConnection) ReadRequest() (req *util.Request, err error) {
|
||||
if err = c.Conn.SetReadDeadline(time.Now().Add(Timeout)); err != nil {
|
||||
return
|
||||
}
|
||||
req, err = util.ReadRequest(c.BufReader)
|
||||
if err != nil {
|
||||
return
|
||||
@@ -243,9 +240,6 @@ func (c *NetConnection) WriteResponse(res *util.Response) (err error) {
|
||||
}
|
||||
|
||||
func (c *NetConnection) ReadResponse() (res *util.Response, err error) {
|
||||
if err := c.Conn.SetReadDeadline(time.Now().Add(Timeout)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res, err = util.ReadResponse(c.BufReader)
|
||||
if err == nil {
|
||||
c.Debug("<-", "res", res.String())
|
||||
|
Reference in New Issue
Block a user