@@ -114,15 +114,16 @@ type VectorisedPacketReadWaitCreator interface {
114114 CreateVectorisedPacketReadWaiter () (VectorisedPacketReadWaiter , bool )
115115}
116116
117- type SyscallReadCreator interface {
118- SyscallConnForRead () syscall.Conn
117+ type SyscallReader interface {
118+ SyscallConnForRead () syscall.RawConn
119+ HandleSyscallReadError (inputErr error ) ([]byte , error )
119120}
120121
121122func SyscallAvailableForRead (reader io.Reader ) bool {
122123 if _ , ok := reader .(syscall.Conn ); ok {
123124 return true
124125 }
125- if _ , ok := reader .(SyscallReadCreator ); ok {
126+ if _ , ok := reader .(SyscallReader ); ok {
126127 return true
127128 }
128129 if u , ok := reader .(ReaderWithUpstream ); ! ok || ! u .ReaderReplaceable () {
@@ -137,34 +138,35 @@ func SyscallAvailableForRead(reader io.Reader) bool {
137138 return false
138139}
139140
140- func SyscallConnForRead (reader io.Reader ) syscall.Conn {
141+ func SyscallConnForRead (reader io.Reader ) ( SyscallReader , syscall.RawConn ) {
141142 if c , ok := reader .(syscall.Conn ); ok {
142- return c
143+ conn , _ := c .SyscallConn ()
144+ return nil , conn
143145 }
144- if c , ok := reader .(SyscallReadCreator ); ok {
145- return c .SyscallConnForRead ()
146+ if c , ok := reader .(SyscallReader ); ok {
147+ return c , c .SyscallConnForRead ()
146148 }
147- if u , ok := reader .(ReaderWithUpstream ); ! ok || ! u .ReaderReplaceable () {
148- return nil
149+ if u , ok := reader .(ReaderWithUpstream ); ! ok || u .ReaderReplaceable () {
150+ return nil , nil
149151 }
150152 if u , ok := reader .(WithUpstreamReader ); ok {
151153 return SyscallConnForRead (u .UpstreamReader ().(io.Reader ))
152154 }
153155 if u , ok := reader .(common.WithUpstream ); ok {
154156 return SyscallConnForRead (u .Upstream ().(io.Reader ))
155157 }
156- return nil
158+ return nil , nil
157159}
158160
159- type SyscallWriteCreator interface {
160- SyscallConnForWrite () syscall.Conn
161+ type SyscallWriter interface {
162+ SyscallConnForWrite () syscall.RawConn
161163}
162164
163165func SyscallAvailableForWrite (writer io.Writer ) bool {
164166 if _ , ok := writer .(syscall.Conn ); ok {
165167 return true
166168 }
167- if _ , ok := writer .(SyscallWriteCreator ); ok {
169+ if _ , ok := writer .(SyscallWriter ); ok {
168170 return true
169171 }
170172 if u , ok := writer .(WriterWithUpstream ); ! ok || ! u .WriterReplaceable () {
@@ -179,21 +181,22 @@ func SyscallAvailableForWrite(writer io.Writer) bool {
179181 return false
180182}
181183
182- func SyscallConnForWrite (writer io.Writer ) syscall.Conn {
184+ func SyscallConnForWrite (writer io.Writer ) ( SyscallWriter , syscall.RawConn ) {
183185 if c , ok := writer .(syscall.Conn ); ok {
184- return c
186+ conn , _ := c .SyscallConn ()
187+ return nil , conn
185188 }
186- if c , ok := writer .(SyscallWriteCreator ); ok {
187- return c .SyscallConnForWrite ()
189+ if c , ok := writer .(SyscallWriter ); ok {
190+ return c , c .SyscallConnForWrite ()
188191 }
189192 if u , ok := writer .(WriterWithUpstream ); ! ok || ! u .WriterReplaceable () {
190- return nil
193+ return nil , nil
191194 }
192195 if u , ok := writer .(WithUpstreamWriter ); ok {
193196 return SyscallConnForWrite (u .UpstreamWriter ().(io.Writer ))
194197 }
195198 if u , ok := writer .(common.WithUpstream ); ok {
196199 return SyscallConnForWrite (u .Upstream ().(io.Writer ))
197200 }
198- return nil
201+ return nil , nil
199202}
0 commit comments