#!/usr/bin/python import optparse import os import signal import socket import sys ATHINFO_FALLBACK_PORT = 49155 def alarm(signum, frame): print >>sys.stderr, 'athinfo: timed out' sys.exit(1) def main(): parser = optparse.OptionParser( usage='%prog [options] host query' ) parser.add_option( '-t', '--timeout', type='int', dest='timeout', help='timeout after SECONDS', metavar='SECONDS', ) (options, args) = parser.parse_args() if len(args) != 2: parser.print_usage() return 1 host = args[0] query = args[1] try: port = socket.getservbyname('athinfo', 'tcp') except socket.error: port = ATHINFO_FALLBACK_PORT try: host_addr = socket.gethostbyname(host) except socket.error: print >>sys.stderr, 'athinfo: host %s not found' % host return 1 try: s = socket.socket() if options.timeout: signal.signal(signal.SIGALRM, alarm) signal.alarm(options.timeout) s.connect((host_addr, port)) s.sendall('%s\n' % query) sys.stdout.writelines(s.makefile()) except socket.error, e: print >>sys.stderr, 'athinfo: %s' % e.args[-1] return 1 except IOError, e: print >>sys.stderr, 'athinfo: %s' % e.args[-1] return 1 except KeyboardInterrupt: return 1 if __name__ == '__main__': sys.exit(main())