Я работаю с tcl-скриптом под ubuntu 12.04, и я столкнулся с некоторыми проблемами при попытке настроить многоадресный сокет. То, что я пытаюсь сделать, - переслать трафик из одного сокета в многоадресный, но я не знаю, почему, хотя сокет многоадресной рассылки создается хорошо, по-видимому; он не связан с группой многоадресной передачи, которую я хочу.TCL-скрипт не может настроить многоадресный сокет
Это сценарий, я использую
#!/bin/sh
# test.tcl \
exec tclsh "$0" ${1+"[email protected]"}
package require udp
set multicastPort "50003"
proc connector {unicastIP multicastIP port {protocol tcp}} {
if { [string equal $protocol "tcp"] } {
socket -server serverTCP -myaddr $unicastIP $port
puts "tcp"
} elseif {[string equal $protocol "udp" ] } {
serverUDP $unicastIP $multicastIP $port
puts "udp"
}
}
proc serverUDP {unicastIP multicastIP port} {
global multicastPort
set socketUDP [udp_open $port]
puts " $unicastIP"
fconfigure $socketUDP -blocking false -translation binary -buffering none -remote [list $unicastIP $port]
#fileevent $socketUDP readable [list gettingData $socketUDP]
set multicastSocket [udp_open $multicastPort]
udp_conf $multicastSocket -ttl 4
fconfigure $multicastSocket -blocking false -translation binary -buffering none -mcastadd $multicastIP -remote [list $multicastIP $port]
fileevent $socketUDP readable [list forwarding $socketUDP $multicastSocket ]
#puts $socketUDP "hello!"
#flush $socketUDP
}
proc forwarding {socketSrc socketDst} {
set data [read -nonewline $socketSrc]
puts "Read data-> $data"
puts -nonewline $socketDst $data
puts "Written data-> [read -nonewline $socketDst]"
}
connector 127.0.0.1 224.0.1.1 50000 udp
vwait forever
Однако, если я бегу сценарий и проверить порты в моей системе, групповой порт не назначен правильный многоадресного IP, как вы можете видеть
~$ netstat -ptnlu
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:50000 0.0.0.0:* 3334/tclsh
udp 0 0 0.0.0.0:50003 0.0.0.0:* 3334/tclsh
Может ли кто-нибудь сказать мне причину?
Чанты заранее,
С уважением!
Если я бегу мой сценарий и выполнить первый или второй команды, я не получаю какой-либо вывода из tcpdump, означает ли это, что сообщения igmp не отправляются? – ndarkness
@ndarkness, если имя интерфейса и адрес группы верны, тогда да. Сначала попробуйте создать действительно минимальный пример. Другой вопрос: используете ли вы дистрибутивное ядро «запаса» (я имею в виду, вы уверены, что многократное кастинг включен)? Рассмотрение '/ boot/config- $ version' для' IGMP' и 'multi' может помочь. Также рекомендуется Grepping вывод 'sysctl -a'. – kostix
Привет, спасибо за подсказки, делающие 'cat /boot/config-3.5.0-39-generic | grep IGMP' возвращает 'CONFIG_BRIDGE_IGMP_SNOOPING = y'. И если я набираю 'sysctl -a | grep igmp' получите это 'net.ipv4.conf.all.force_igmp_version = 0 net.ipv4.conf.default.force_igmp_version = 0 net.ipv4.conf.eth0.force_igmp_version = 0 net.ipv4.conf.eth1. force_igmp_version = 0 net.ipv4.conf.eth2.force_igmp_version = 0 net.ipv4.conf.lo.force_igmp_version = 0 net.ipv4.igmp_max_memberships = 20 net.ipv4.igmp_max_msf = 10' – ndarkness