diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2001-07-24 20:34:08 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2001-07-24 20:34:08 (GMT) |
commit | a43c2f845e59b833b17e45994cd81c631c071236 (patch) | |
tree | 76fcd97361c26474054557e554fc548770431acf /Lib/smtplib.py | |
parent | d61e3eab449102834406b9026852e1db51de16bb (diff) | |
download | cpython-a43c2f845e59b833b17e45994cd81c631c071236.zip cpython-a43c2f845e59b833b17e45994cd81c631c071236.tar.gz cpython-a43c2f845e59b833b17e45994cd81c631c071236.tar.bz2 |
Patch #401196: Use getaddrinfo and AF_INET6 in TCP servers and clients.
Diffstat (limited to 'Lib/smtplib.py')
-rwxr-xr-x | Lib/smtplib.py | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/Lib/smtplib.py b/Lib/smtplib.py index f1e4a27..fde6c69 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -208,24 +208,32 @@ class SMTP: specified during instantiation. """ - if not port: - i = host.find(':') + if not port and (host.find(':') == host.rfind(':')): + i = host.rfind(':') if i >= 0: host, port = host[:i], host[i+1:] try: port = int(port) except ValueError: raise socket.error, "nonnumeric port" if not port: port = SMTP_PORT - self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - if self.debuglevel > 0: print 'connect:', (host, port) - try: - self.sock.connect((host, port)) - except socket.error: - self.close() - raise - (code,msg)=self.getreply() - if self.debuglevel >0 : print "connect:", msg - return (code,msg) + if self.debuglevel > 0: print 'connect:', (host, port) + for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM): + af, socktype, proto, canonname, sa = res + try: + self.sock = socket.socket(af, socktype, proto) + if self.debuglevel > 0: print 'connect:', (host, port) + self.sock.connect(sa) + except socket.error, msg: + if self.debuglevel > 0: print 'connect fail:', (host, port) + self.sock.close() + self.sock = None + continue + break + if not self.sock: + raise socket.error, msg + (code, msg) = self.getreply() + if self.debuglevel > 0: print "connect:", msg + return (code, msg) def send(self, str): """Send `str' to the server.""" |