--- pympd-0.07.old/src/modules/mpdlib2.py 2006-07-15 01:13:35.000000000 +0100 +++ pympd-0.07/src/modules/mpdlib2.py 2007-11-11 13:36:44.000000000 +0000 @@ -6,13 +6,42 @@ # OK # ACK +def get_socket(host, port): + sock_err = sock = sock_addrinfo = None + + try: + sock_addrinfo = socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM) + except socket.error, sock_err: + raise RuntimeError(sock_err[1]) + + for res in sock_addrinfo: + sock_domain, sock_type, sock_proto, canonname, sock_addr = res + try: + sock = socket.socket(sock_domain, sock_type, sock_proto) + sock.settimeout(1) + except socket.error, sock_err_msg: + continue + + try: + sock.connect(sock_addr) + except socket.error, sock_err: + sock.close() + continue + + break + + if sock_err: + raise RuntimeError(isinstance(sock_err, socket.timeout) and str(sock_err) \ + or sock_err[1]) + + return sock + class socket_talker(object): def __init__(self, host, port): self.host = host self.port = port - self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.sock.connect((host, port)) + self.sock = get_socket(host, port) self.file = self.sock.makefile("rb+") self.current_line = '' self.ack = ''