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 [email protected] https://lists.sourceforge.net/lists/listinfo/freevo-devel
