add IPv6 support

This commit is contained in:
2014-01-08 21:09:36 -05:00
parent d176dab654
commit 6374d7375f
2 changed files with 256 additions and 218 deletions
+35 -7
View File
@@ -6,6 +6,9 @@ PORT=50003
INTERVAL=10
False=0
True=1
sock=None
class NullDevice:
def write(self, s):
pass
@@ -17,6 +20,35 @@ def handler(signum, frame):
return
sys.exit(0)
def getsock(host):
try:
r=socket.getaddrinfo(host, 50001, 0, 0, socket.SOL_UDP)
except socket.gaierror:
return None
if r[0][0] == 28:
af_type=socket.AF_INET6
elif r[0][0] == 2:
af_type=socket.AF_INET
else:
return None
if verbose:
print "socktype: %s" % af_type
sock=socket.socket(af_type, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, \
sock.getsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR) | 1)
if verbose: print "get socket %s" % sock
return sock
def socksend(msg, tohost):
global sock
if sock == None:
sock=getsock(tohost[0])
sock.sendto(msg, tohost)
msgonly=False
helpflag=False
verbose=False
@@ -115,10 +147,6 @@ if len(hb_hosts) == 0:
sys.exit(1)
sock=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, \
sock.getsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR) | 1)
if verbose:
print "notice: hb_hosts: %s" % str(hb_hosts)
@@ -139,7 +167,7 @@ if len(msgboot) > 0:
for hb_host in hb_hosts:
try:
if verbose: print "sock.send('%s', (%s, %s))" % (msg, hb_host, hb_port)
sock.sendto(msg, (hb_host, hb_port))
socksend(msg, (hb_host, hb_port))
except:
fail=1
if fail:
@@ -199,7 +227,7 @@ while up:
try:
msg="interval=%s;name=%s;time=%s;acks=%s" % (interval, iam, time.time(), ackcount)
if verbose: print "sock.send('%s', (%s, %s))" % (msg, hb_host, hb_port)
sock.sendto(msg, (hb_host, hb_port))
socksend(msg, (hb_host, hb_port))
except:
pass
@@ -207,6 +235,6 @@ up=0
msg="shutdown=1;name=%s;acks=%s" % (iam, ackcount)
for hb_host in hb_hosts:
if verbose: print "hbc: sock.send('%s', (%s, %s))" % (msg, hb_host, hb_port)
sock.sendto(msg, (hb_host, hb_port))
socksend(msg, (hb_host, hb_port))
time.sleep(1)
sock.close()
+16 -6
View File
@@ -340,6 +340,7 @@ def display():
def log(m, service="heartbeat"):
if DEBUG: print "Log: %s" % m
msg = time.strftime("%b %d %H:%M:%S", time.localtime(time.time()))+": "+m+"\n"
msgs.append(msg)
if logfmt == "msg":
@@ -396,7 +397,7 @@ def fromaddr(name, addr, boot, interval, acks):
#
#
def readsock():
def readsock(sock):
global htab, win
data, addr = sock.recvfrom(1024)
pairs = string.split(data, ';')
@@ -475,7 +476,9 @@ def readsock():
del hosts[name].cmds[0]
log("%s command initiated" % name)
try:
sock.sendto(rmsg, addr)
ss=sock.sendto(rmsg, addr)
if DEBUG:
log("msg from %s,%s, sent %s bytes back" % (addr[0], addr[1], ss))
except:
pass
@@ -791,11 +794,16 @@ atexit.register(on_exit)
ilist = []
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("", hb_port))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
ilist.append(sock)
sock6 = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
sock6.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock6.bind(("", hb_port))
ilist.append(sock6)
serv = HtmlServer((hbd_host, hbd_port), HtmlHandler)
ilist.append(serv.fileno())
@@ -861,10 +869,12 @@ while running:
except:
sys.exit(1)
for fh in sr[0]:
if fh == sock:
readsock()
if fh == serv.fileno():
if fh in [sock, sock6]:
readsock(fh)
elif fh == serv.fileno():
serv.handle_request()
else:
print("what happend just now")
if now >= next:
next = now+1
checkoverdue()