MCPcopy Create free account
hub / github.com/encodeous/nylon / receiveIP

Method receiveIP

polyamide/conn/bind_std.go:231–285  ·  view source on GitHub ↗
(
	br batchReader,
	conn *net.UDPConn,
	rxOffload bool,
	bufs [][]byte,
	sizes []int,
	eps []Endpoint,
)

Source from the content-addressed store, hash-verified

229}
230
231func (s *StdNetBind) receiveIP(
232 br batchReader,
233 conn *net.UDPConn,
234 rxOffload bool,
235 bufs [][]byte,
236 sizes []int,
237 eps []Endpoint,
238) (n int, err error) {
239 msgs := s.getMessages()
240 for i := range bufs {
241 (*msgs)[i].Buffers[0] = bufs[i]
242 (*msgs)[i].OOB = (*msgs)[i].OOB[:cap((*msgs)[i].OOB)]
243 }
244 defer s.putMessages(msgs)
245 var numMsgs int
246 if runtime.GOOS == "linux" || runtime.GOOS == "android" {
247 if rxOffload {
248 readAt := len(*msgs) - (IdealBatchSize / udpSegmentMaxDatagrams)
249 numMsgs, err = br.ReadBatch((*msgs)[readAt:], 0)
250 if err != nil {
251 return 0, err
252 }
253 numMsgs, err = splitCoalescedMessages(*msgs, readAt, getGSOSize)
254 if err != nil {
255 return 0, err
256 }
257 } else {
258 numMsgs, err = br.ReadBatch(*msgs, 0)
259 if err != nil {
260 return 0, err
261 }
262 }
263 perf.RecvBatchSize.Add(float64(numMsgs))
264 } else {
265 msg := &(*msgs)[0]
266 msg.N, msg.NN, _, msg.Addr, err = conn.ReadMsgUDP(msg.Buffers[0], msg.OOB)
267 if err != nil {
268 return 0, err
269 }
270 numMsgs = 1
271 }
272 perf.RecvsPerSecond.Add(1)
273 for i := 0; i < numMsgs; i++ {
274 msg := &(*msgs)[i]
275 sizes[i] = msg.N
276 if sizes[i] == 0 {
277 continue
278 }
279 addrPort := msg.Addr.(*net.UDPAddr).AddrPort()
280 ep := &StdNetEndpoint{AddrPort: addrPort} // TODO: remove allocation
281 getSrcFromControl(msg.OOB[:msg.NN], ep)
282 eps[i] = ep
283 }
284 return numMsgs, nil
285}
286
287func (s *StdNetBind) makeReceiveIPv4(pc *ipv4.PacketConn, conn *net.UDPConn, rxOffload bool) ReceiveFunc {
288 return func(bufs [][]byte, sizes []int, eps []Endpoint) (n int, err error) {

Callers 2

makeReceiveIPv4Method · 0.95
makeReceiveIPv6Method · 0.95

Calls 5

getMessagesMethod · 0.95
putMessagesMethod · 0.95
splitCoalescedMessagesFunction · 0.85
ReadBatchMethod · 0.80
getSrcFromControlFunction · 0.70

Tested by

no test coverage detected