hi, I nailed it. It depends on the value of /proc/sys/net/ipv6/bindv6only
The man page ipv6(7) says IPV6_V6ONLY (since Linux 2.4.21 and 2.6) If this flag is set to true (nonzero), then the socket is re‐ stricted to sending and receiving IPv6 packets only. In this case, an IPv4 and an IPv6 application can bind to a single port at the same time. If this flag is set to false (zero), then the socket can be used to send and receive packets to and from an IPv6 address or an IPv4-mapped IPv6 address. The argument is a pointer to a boolean value in an integer. The default value for this flag is defined by the contents of the file /proc/sys/net/ipv6/bindv6only. The default value for that file is 0 (false). AFAICT kaa works fine in my systems where /proc/sys/net/ipv6/bindv6only is 0 But it happened that in my freevo-box it is 1 ( why?? I dont know!!) and it seems that somehow this makes kaa fail. I modified the script sockettest.py, I attach it and I attach the output when the above is 1 or 0 I think that if you want kaa to work uniformly in all systems then you should explicitely set the flag IPV6_V6ONLY to 'false' in the kaa socket code. a.
import socket,os,sys,subprocess port=20011 def to_v6(addr): return '::ffff:' + addr if ':' not in addr and addr else addr def netstat(): from subprocess import * #os.system('echo -n " netstat inet = " ; netstat --inet -n -a | grep '+str(port)+' ; echo') #os.system('echo -n " netstat inet6 =" ; netstat --inet6 -n -a | grep '+str(port)+' ; echo') print " netstat inet = " +\ Popen('netstat --inet -n -a | grep '+str(port),stdout=PIPE,shell=True).stdout.read().strip() print " netstat inet6= " +\ Popen('netstat --inet6 -n -a | grep '+str(port),stdout=PIPE,shell=True).stdout.read().strip() def v6sock(addr, port, bind=True, get=False): print 'AF_INET6 %s to %s:%d' % ( ('bind' if bind else 'connect') , addr, port) addrs = socket.getaddrinfo(addr, port, socket.AF_INET6, socket.SOCK_STREAM, 0, socket.AI_V4MAPPED | socket.AI_ALL) for addrinfo in (a[4] for a in addrs): newinfo = (to_v6(addrinfo[0]),) + addrinfo[1:] print ' try %s -> %s' % (addrinfo, newinfo) try: sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM, socket.IPPROTO_TCP) #print ' ',socket.AF_INET6, socket.SOCK_STREAM, socket.IPPROTO_TCP sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if bind: sock.bind(newinfo) else: sock.connect(newinfo) if get: return sock except socket.error, e: print ' -> failed:', e def v4sock(addr, port, bind=True, get=False): print 'AF_INET %s to %s:%d' % ('bind' if bind else 'connect', addr, port) addrs = socket.getaddrinfo(addr, port, socket.AF_INET, socket.SOCK_STREAM, 0, socket.AI_ALL) for addrinfo in (a[4] for a in addrs): print ' try %s' % repr(addrinfo) try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP) #print ' ',socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if bind: sock.bind(addrinfo) else: sock.connect(addrinfo) if get: return sock except socket.error, e: print ' -> failed:', e def server_example(addr): "http://docs.python.org/release/2.7.2/library/socket.html" # Echo server program import socket import sys #addr = addr # Symbolic name meaning all available interfaces #PORT = port # Arbitrary non-privileged port s = None for res in socket.getaddrinfo(addr, port, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE): af, socktype, proto, canonname, sa = res print ' getaddrinfo returns ',res try: s = socket.socket(af, socktype, proto) except socket.error, msg: s = None continue try: s.bind(sa) s.listen(1) except socket.error, msg: print '********',err s.close() s = None continue #nope, lets try them all #break if s is None: print 'could not open socket' sys.exit(1) return s # conn, addr = s.accept() # print 'Connected by', addr # while 1: # data = conn.recv(1024) # if not data: break # conn.send(data) # conn.close() for host in (None, 'localhost', '127.0.0.1'): print '------', host #v4sock(host, port) lsock = v4sock(host, port, get=True) if lsock: lsock.listen(10) netstat() v4sock(host or 'localhost', port, False) lsock.close() else: print ' skipping connect' for host in (None, 'localhost', 'ip6-localhost', '127.0.0.1', '::1'): print '------', host #v6sock(host, port) lsock = v6sock(host, port, get=True) if lsock: lsock.listen(10) netstat() if host == 'localhost': v4sock(host, port, False) v6sock(host or 'localhost', port, False) lsock.close() else: print ' skipping connect' for host in (None, 'localhost', 'ip6-localhost', '127.0.0.1', '::1'): print '--doc-', host lsock = server_example(host) if lsock: lsock.listen(10) netstat() if host == 'localhost': v4sock(host, port, False) v6sock(host or 'localhost', port, False) lsock.close() else: print ' skipping connect'
------ None AF_INET bind to None:20011 try ('127.0.0.1', 20011) netstat inet = tcp 0 0 127.0.0.1:20011 0.0.0.0:* LISTEN netstat inet6= AF_INET connect to localhost:20011 try ('127.0.0.1', 20011) ------ localhost AF_INET bind to localhost:20011 try ('127.0.0.1', 20011) netstat inet = tcp 0 0 127.0.0.1:20011 0.0.0.0:* LISTEN netstat inet6= AF_INET connect to localhost:20011 try ('127.0.0.1', 20011) ------ 127.0.0.1 AF_INET bind to 127.0.0.1:20011 try ('127.0.0.1', 20011) netstat inet = tcp 0 0 127.0.0.1:20011 0.0.0.0:* LISTEN netstat inet6= AF_INET connect to 127.0.0.1:20011 try ('127.0.0.1', 20011) ------ None AF_INET6 bind to None:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) netstat inet = netstat inet6= tcp6 0 0 ::1:20011 :::* LISTEN AF_INET6 connect to localhost:20011 try ('127.0.0.1', 20011) -> ('::ffff:127.0.0.1', 20011) -> failed: [Errno 101] Network is unreachable ------ localhost AF_INET6 bind to localhost:20011 try ('127.0.0.1', 20011) -> ('::ffff:127.0.0.1', 20011) -> failed: [Errno 22] Invalid argument skipping connect ------ ip6-localhost AF_INET6 bind to ip6-localhost:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) netstat inet = netstat inet6= tcp6 0 0 ::1:20011 :::* LISTEN AF_INET6 connect to ip6-localhost:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) ------ 127.0.0.1 AF_INET6 bind to 127.0.0.1:20011 try ('::ffff:127.0.0.1', 20011, 0, 0) -> ('::ffff:127.0.0.1', 20011, 0, 0) -> failed: [Errno 22] Invalid argument skipping connect ------ ::1 AF_INET6 bind to ::1:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) netstat inet = netstat inet6= tcp6 0 0 ::1:20011 :::* LISTEN AF_INET6 connect to ::1:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) --doc- None getaddrinfo returns (2, 1, 6, '', ('0.0.0.0', 20011)) getaddrinfo returns (10, 1, 6, '', ('::', 20011, 0, 0)) netstat inet = netstat inet6= tcp6 0 0 :::20011 :::* LISTEN AF_INET6 connect to localhost:20011 try ('127.0.0.1', 20011) -> ('::ffff:127.0.0.1', 20011) -> failed: [Errno 101] Network is unreachable --doc- localhost getaddrinfo returns (2, 1, 6, '', ('127.0.0.1', 20011)) netstat inet = tcp 0 0 127.0.0.1:20011 0.0.0.0:* LISTEN netstat inet6= AF_INET connect to localhost:20011 try ('127.0.0.1', 20011) AF_INET6 connect to localhost:20011 try ('127.0.0.1', 20011) -> ('::ffff:127.0.0.1', 20011) -> failed: [Errno 101] Network is unreachable --doc- ip6-localhost getaddrinfo returns (10, 1, 6, '', ('::1', 20011, 0, 0)) netstat inet = netstat inet6= tcp6 0 0 ::1:20011 :::* LISTEN AF_INET6 connect to ip6-localhost:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) --doc- 127.0.0.1 getaddrinfo returns (2, 1, 6, '', ('127.0.0.1', 20011)) netstat inet = tcp 0 0 127.0.0.1:20011 0.0.0.0:* LISTEN netstat inet6= AF_INET6 connect to 127.0.0.1:20011 try ('::ffff:127.0.0.1', 20011, 0, 0) -> ('::ffff:127.0.0.1', 20011, 0, 0) -> failed: [Errno 101] Network is unreachable --doc- ::1 getaddrinfo returns (10, 1, 6, '', ('::1', 20011, 0, 0)) netstat inet = netstat inet6= tcp6 0 0 ::1:20011 :::* LISTEN AF_INET6 connect to ::1:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0)
------ None AF_INET bind to None:20011 try ('127.0.0.1', 20011) netstat inet = tcp 0 0 127.0.0.1:20011 0.0.0.0:* LISTEN netstat inet6= AF_INET connect to localhost:20011 try ('127.0.0.1', 20011) ------ localhost AF_INET bind to localhost:20011 try ('127.0.0.1', 20011) netstat inet = tcp 0 0 127.0.0.1:20011 0.0.0.0:* LISTEN netstat inet6= AF_INET connect to localhost:20011 try ('127.0.0.1', 20011) ------ 127.0.0.1 AF_INET bind to 127.0.0.1:20011 try ('127.0.0.1', 20011) netstat inet = tcp 0 0 127.0.0.1:20011 0.0.0.0:* LISTEN netstat inet6= AF_INET connect to 127.0.0.1:20011 try ('127.0.0.1', 20011) ------ None AF_INET6 bind to None:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) netstat inet = netstat inet6= tcp6 0 0 ::1:20011 :::* LISTEN AF_INET6 connect to localhost:20011 try ('127.0.0.1', 20011) -> ('::ffff:127.0.0.1', 20011) -> failed: [Errno 111] Connection refused ------ localhost AF_INET6 bind to localhost:20011 try ('127.0.0.1', 20011) -> ('::ffff:127.0.0.1', 20011) netstat inet = netstat inet6= tcp6 0 0 127.0.0.1:20011 :::* LISTEN AF_INET connect to localhost:20011 try ('127.0.0.1', 20011) AF_INET6 connect to localhost:20011 try ('127.0.0.1', 20011) -> ('::ffff:127.0.0.1', 20011) ------ ip6-localhost AF_INET6 bind to ip6-localhost:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) netstat inet = netstat inet6= tcp6 0 0 ::1:20011 :::* LISTEN AF_INET6 connect to ip6-localhost:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) ------ 127.0.0.1 AF_INET6 bind to 127.0.0.1:20011 try ('::ffff:127.0.0.1', 20011, 0, 0) -> ('::ffff:127.0.0.1', 20011, 0, 0) netstat inet = netstat inet6= tcp6 0 0 127.0.0.1:20011 :::* LISTEN AF_INET6 connect to 127.0.0.1:20011 try ('::ffff:127.0.0.1', 20011, 0, 0) -> ('::ffff:127.0.0.1', 20011, 0, 0) ------ ::1 AF_INET6 bind to ::1:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) netstat inet = netstat inet6= tcp6 0 0 ::1:20011 :::* LISTEN AF_INET6 connect to ::1:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) --doc- None getaddrinfo returns (2, 1, 6, '', ('0.0.0.0', 20011)) getaddrinfo returns (10, 1, 6, '', ('::', 20011, 0, 0)) netstat inet = netstat inet6= tcp6 0 0 :::20011 :::* LISTEN AF_INET6 connect to localhost:20011 try ('127.0.0.1', 20011) -> ('::ffff:127.0.0.1', 20011) --doc- localhost getaddrinfo returns (2, 1, 6, '', ('127.0.0.1', 20011)) netstat inet = tcp 0 0 127.0.0.1:20011 0.0.0.0:* LISTEN netstat inet6= AF_INET connect to localhost:20011 try ('127.0.0.1', 20011) AF_INET6 connect to localhost:20011 try ('127.0.0.1', 20011) -> ('::ffff:127.0.0.1', 20011) --doc- ip6-localhost getaddrinfo returns (10, 1, 6, '', ('::1', 20011, 0, 0)) netstat inet = netstat inet6= tcp6 0 0 ::1:20011 :::* LISTEN AF_INET6 connect to ip6-localhost:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0) --doc- 127.0.0.1 getaddrinfo returns (2, 1, 6, '', ('127.0.0.1', 20011)) netstat inet = tcp 0 0 127.0.0.1:20011 0.0.0.0:* LISTEN netstat inet6= AF_INET6 connect to 127.0.0.1:20011 try ('::ffff:127.0.0.1', 20011, 0, 0) -> ('::ffff:127.0.0.1', 20011, 0, 0) --doc- ::1 getaddrinfo returns (10, 1, 6, '', ('::1', 20011, 0, 0)) netstat inet = netstat inet6= tcp6 0 0 ::1:20011 :::* LISTEN AF_INET6 connect to ::1:20011 try ('::1', 20011, 0, 0) -> ('::1', 20011, 0, 0)
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________ Freevo-devel mailing list Freevo-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freevo-devel