Skip to content

Commit 5faac16

Browse files
authored
do some fix
1 parent c6a76ff commit 5faac16

File tree

4 files changed

+27
-9
lines changed

4 files changed

+27
-9
lines changed

common/buf/copy.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package buf
22

33
import (
4+
"fmt"
45
"io"
56
"sync"
67
"time"
@@ -116,8 +117,8 @@ func Copy(reader Reader, writer Writer, options ...CopyOption) error {
116117
option(&handler)
117118
}
118119
var err error
119-
if sReader, ok := reader.(*SingleReader); ok && false {
120-
err = copyV(sReader, writer, &handler)
120+
if gReader, ok := reader.(*GatherableReader); ok {
121+
err = copyV(gReader, writer, &handler)
121122
} else {
122123
err = copyInternal(reader, writer, &handler)
123124
}
@@ -141,7 +142,7 @@ func CopyOnceTimeout(reader Reader, writer Writer, timeout time.Duration) error
141142
return writer.WriteMultiBuffer(mb)
142143
}
143144

144-
func copyV(r *SingleReader, w Writer, handler *copyHandler) error {
145+
func copyV(r *GatherableReader, w Writer, handler *copyHandler) error {
145146
// channel buffer size is maxBuffer/maxPerPacketLen (ignore the case of many small packets)
146147
// default buffer size:
147148
// 0 in ARM MIPS MIPSLE
@@ -162,6 +163,7 @@ func copyV(r *SingleReader, w Writer, handler *copyHandler) error {
162163
defer wg.Done()
163164
defer close(cache)
164165
for {
166+
fmt.Println("read")
165167
b, err := r.readBuffer()
166168
if err == nil {
167169
select {

common/buf/io.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,27 @@ func NewReader(reader io.Reader) Reader {
144144
}
145145
}
146146

147+
type GatherableReader struct {
148+
io.Reader
149+
}
150+
151+
func (r *GatherableReader) ReadMultiBuffer() (MultiBuffer, error) {
152+
b, err := ReadBuffer(r.Reader)
153+
return MultiBuffer{b}, err
154+
}
155+
156+
func (r *GatherableReader) readBuffer() (*Buffer, error) {
157+
b, err := ReadBuffer(r.Reader)
158+
return b, err
159+
}
160+
161+
// GatherableReader is like SingleReader but will be automatically gathered and use writev in buf.Copy().
162+
func NewGatherableReader(reader io.Reader) *GatherableReader {
163+
return &GatherableReader{
164+
Reader: reader,
165+
}
166+
}
167+
147168
// NewPacketReader creates a new PacketReader based on the given reader.
148169
func NewPacketReader(reader io.Reader) Reader {
149170
if mr, ok := reader.(Reader); ok {

common/buf/reader.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,6 @@ func (r *SingleReader) ReadMultiBuffer() (MultiBuffer, error) {
159159
return MultiBuffer{b}, err
160160
}
161161

162-
func (r *SingleReader) readBuffer() (*Buffer, error) {
163-
b, err := ReadBuffer(r.Reader)
164-
return b, err
165-
}
166-
167162
// PacketReader is a Reader that read one Buffer every time.
168163
type PacketReader struct {
169164
io.Reader

proxy/vless/inbound/inbound.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s
291291
errors.LogInfo(ctx, "firstLen = ", firstLen)
292292

293293
reader := &buf.BufferedReader{
294-
Reader: buf.NewReader(connection),
294+
Reader: buf.NewGatherableReader(connection),
295295
Buffer: buf.MultiBuffer{first},
296296
}
297297

0 commit comments

Comments
 (0)