diff --git a/Lib/ftplib.py b/Lib/ftplib.py
index 4e74090..ed588b5 100644
--- a/Lib/ftplib.py
+++ b/Lib/ftplib.py
@@ -48,12 +48,11 @@
 
 
 # Next port to be used by makeport(), with PORT_OFFSET added
+# (This is now only used when the python interpreter doesn't support
+# the getsockname() method yet)
 nextport = 0
 PORT_OFFSET = 40000
 PORT_CYCLE = 1000
-# XXX This is a nuisance: when using the program several times in a row,
-# reusing the port doesn't work and you have to edit the first port
-# assignment...  We need getsockname()!
 
 
 # The class itself
@@ -152,11 +151,10 @@
 		self.putcmd(cmd)
 		return self.getresp()
 
-	# Send a command and ignore the response, which must begin with '2'
+	# Send a command and expect a response beginning with '2'
 	def voidcmd(self, cmd):
-		resp = self.sendcmd(cmd)
-		if resp[0] <> '2':
-			raise error_reply, resp
+		self.putcmd(cmd)
+		self.voidresp()
 
 	# Send a PORT command with the current host and the given port number
 	def sendport(self, port):
@@ -171,11 +169,20 @@
 	# Create a new socket and send a PORT command for it
 	def makeport(self):
 		global nextport
-		port = nextport + PORT_OFFSET
-		nextport = (nextport + 1) % PORT_CYCLE
 		sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-		sock.bind('', port)
-		sock.listen(0)
+		try:
+			getsockname = sock.getsockname
+		except AttributeError:
+			if self.debugging > 1:
+				print '*** getsockname not supported',
+				print '-- using manual port assignment ***'
+			port = nextport + PORT_OFFSET
+			nextport = (nextport + 1) % PORT_CYCLE
+			sock.bind('', port)
+			getsockname = None
+		sock.listen(0) # Assigns the port if not explicitly bound
+		if getsockname:
+			host, port = getsockname()
 		resp = self.sendport(port)
 		return sock
 
