Павел, ещё несколько моих соображений. Никаких векторных записей не нужно, на самом деле.
Я почитал немного гугль и понял, что в любом полученном по udp пакете может быть только один RTP заголовок (это ведь сообщение) и находится он всегда впереди. Т.е. Я бы решал задачу так: зарезервировал бы сколько-то буферов, длиной равной MTU интерфейса для приёма пакетов. Сделал бы там раунд-робин среди этих буферов. Далее делается просто цикл:
Вызывается poll для принимающего и передающего сокета. Если есть возможность послать - посылаем, если принять - принимаем. При отсылке просто передаём не весь буфер, а вычитаем длину RTP заголовка. Т.е. всё вроде просто.
Посмотрел пакеты длиной 1348 байт. Там стоит бит Х (0x9021) - т.е. за RTP заголовком идёт что-то дополнительное, длину которого понятно как определить. В общем, на производительности udpxy эта штука никак не скажется.
Code:
15:24:47.547303 IP 172.16.16.70.1084 > 233.32.240.1.5050: UDP, length: 1364
0x0000: 4588 0570 3b91 0000 1711 cceb ac10 1046 E..p;..........F
0x0010: e920 f001 043c 13ba 055c 5f59 9021 ba98 .....<...\_Y.!..
0x0020: a80c c980 796b 87d4 100b 0008 0206 139c ....yk..........
0x0030: 59b3 8e0f 0306 0000 a80c 4677 010e 5301 Y.........Fw..S.
0x0040: a80c 469c cb5e b18e ebbd d547 4740 0019 ..F..^.....GG@..
0x0050: 0000 b00d 001f cb00 0000 10e0 20f7 574b ..............WK
0x0060: 8cff ffff ffff ffff ffff ffff ffff ffff ................
0x0070: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0080: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0090: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x00a0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x00b0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x00c0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x00d0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x00e0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x00f0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0100: ffff ffff ffff ffff 4740 2019 0002 b023 ........G@.....#
0x0110: 0010 cb00 00e2 59f0 0002 e259 f006 0904 ......Y....Y....
0x0120: 4ae2 ffe0 03e2 5af0 0609 044a e2ff e0af J.....Z....J....
0x0130: f622 40ff ffff ffff ffff ffff ffff ffff ."@.............
0x0140: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0150: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0160: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0170: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0180: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0190: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x01a0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x01b0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x01c0: ffff ffff 475f e01a 0000 01f0 016a 13a8 ....G_.......j..
0x01d0: 0ce5 a000 0202 592f 0176 5eff 954b 7555 ......Y/.v^..KuU
0x01e0: 3300 00fa 007b 4fa2 1cc1 20c6 409f 9ef9 3....{O.....@...
0x01f0: 8b79 0530 ba00 03ed 0592 68a6 f52b 42f4 .y.0......h..+B.
0x0200: 9653 4c81 fd49 6d76 5eff 954b 7569 780c .SL..Imv^..Kuix.
0x0210: 8000 0000 00ff f1f0 0000 1c20 0000 0e10 ................
0x0220: 0000 3840 0000 2a30 0000 5460 0000 4650 ..8@..*0..T`..FP
0x0230: 0000 7080 0000 6270 0000 8ca0 0000 7e90 ..p...bp......~.
0x0240: 0000 025a 2f01 765e ff95 4b74 5b33 0000 ...Z/.v^..Kt[3..
0x0250: fa00 7b4f a21c c120 c640 9f9e f98b 7905 ..{O.....@....y.
0x0260: 30ba 0003 aeee 0d20 0b7c 46d6 8676 625e 0........|F..vb^
0x0270: 8a7c aaf3 765e ff95 4b74 61f5 0400 ffa1 .|..v^..Kta.....
0x0280: 471f e01b 1e00 ffcb 4e00 fff5 7e00 001f G.......N...~...
0x0290: ae00 00ff ffff ffff ffff ffff ffff ffff ................
0x02a0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x02b0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x02c0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x02d0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x02e0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x02f0: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0300: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0310: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0320: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0330: ffff ffff ffff ffff ffff ffff 4742 5915 ............GBY.
0x0340: 0000 01e0 0000 84c0 0a3d a033 cb41 1da0 .........=.3.A..
0x0350: 3393 0100 0001 b32d 0240 2312 1123 8210 3......-.@#..#..
0x0360: 2020 2620 262c 2c2c 2c2c 2c34 3034 3636 ..&.&,,,,,,40466
0x0370: 3634 3434 3436 3636 3a3a 3a44 4444 3a3a 64444666:::DDD::
0x0380: 3a36 363a 3a40 4044 444a 4c4a 4646 4446 :66::@@DDJLJFFDF
0x0390: 4c4c 5050 5060 605c 5c70 7074 8a8a a710 LLPPP``\\ppt....
0x03a0: 1111 1212 1213 1313 1314 1414 1414 1515 ................
0x03b0: 1515 1515 1616 1616 1616 1617 1717 1717 ................
0x03c0: 1717 1718 1818 1918 1818 191a 1a1a 1a19 ................
0x03d0: 1b1b 1b1b 1b1c 1c1c 1c1e 1e1e 1f1f 2100 ..............!.
0x03e0: 0001 b514 8200 0100 0000 0001 b52b 0202 .............+..
0x03f0: 020b 4212 0000 0001 4702 5936 8a00 ffff ..B.....G.Y6....
0x0400: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0410: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0420: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0430: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0440: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0450: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0460: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0470: ffff ffff ffff ffff ffff ffff ffff ffff ................
0x0480: ffff ffff ffff ffb8 8e2e a380 0000 0100 ................
0x0490: 004f fff8 0000 01b5 8fff f798 0000 0000 .O..............
0x04a0: 0101 337e 2912 faee 36c2 ac6f 4548 fd80 ..3~)...6..oEH..
0x04b0: 4a85 9edc 4702 5937 0710 d406 234e 7ea6 J...G.Y7....#N~.
0x04c0: 1229 429e debe d35a ab5d a8d4 5c24 7003 .)B....Z.]..\$p.
0x04d0: b76c 042f f9e6 a8ed b842 add3 7f7f 5877 .l./.....B....Xw
0x04e0: 6268 247f ebc9 2d9d dbcf bdce edda 644b bh$...-.......dK
0x04f0: 1295 435b 39d1 b9a3 a5c8 dd7b cecd 6ddc ..C[9......{..m.
0x0500: d23f d602 27fc 8904 9ffc 7925 b45f a914 .?..'.....y%._..
0x0510: 117f e048 24ff e3c9 2de7 6e65 3f23 6b78 ...H$...-.ne?#kx
0x0520: 8eb6 131a af0c 4e6d 6a3f 6800 e7e6 0227 ......Nmj?h....'
0x0530: fd72 17ba 496a e7fc 4c3f 9e68 247f ed84 .r..Ij..L?.h$...
0x0540: b6af 4463 6fd1 4835 b4f2 6af3 ad45 e6e0 ..Dco.H5..j..E..
0x0550: 033e e9e2 c5c0 97eb 5500 1ef6 f3be 7904 .>......U.....y.
0x0560: 9ffc d24b 7a47 bb5c 7ca5 8601 4da4 e38a ...KzG.\|...M...