summaryrefslogtreecommitdiffstats
path: root/Lib/smtplib.py
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2001-07-24 20:34:08 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2001-07-24 20:34:08 (GMT)
commita43c2f845e59b833b17e45994cd81c631c071236 (patch)
tree76fcd97361c26474054557e554fc548770431acf /Lib/smtplib.py
parentd61e3eab449102834406b9026852e1db51de16bb (diff)
downloadcpython-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-xLib/smtplib.py32
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."""