#!/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())
