| 417 | } |
| 418 | |
| 419 | func (s *StdNetBind) send(conn *net.UDPConn, pc batchWriter, msgs []ipv6.Message) error { |
| 420 | var ( |
| 421 | n int |
| 422 | err error |
| 423 | start int |
| 424 | ) |
| 425 | if runtime.GOOS == "linux" || runtime.GOOS == "android" { |
| 426 | for { |
| 427 | n, err = pc.WriteBatch(msgs[start:], 0) |
| 428 | perf.SendBatchSize.Add(float64(n)) |
| 429 | perf.SendsPerSecond.Add(1) |
| 430 | if err != nil || n == len(msgs[start:]) { |
| 431 | break |
| 432 | } |
| 433 | start += n |
| 434 | } |
| 435 | } else { |
| 436 | for _, msg := range msgs { |
| 437 | _, _, err = conn.WriteMsgUDP(msg.Buffers[0], msg.OOB, msg.Addr.(*net.UDPAddr)) |
| 438 | if err != nil { |
| 439 | break |
| 440 | } |
| 441 | } |
| 442 | perf.SendsPerSecond.Add(float64(len(msgs))) |
| 443 | perf.SendBatchSize.Add(1) |
| 444 | } |
| 445 | return err |
| 446 | } |
| 447 | |
| 448 | const ( |
| 449 | // Exceeding these values results in EMSGSIZE. They account for layer3 and |