On Wed, Nov 21, 2012 at 9:00 AM, <brint...@controlledthinking.com> wrote: > On Tuesday, November 20, 2012 1:48:46 PM UTC-8, Chris Angelico wrote: >> On Wed, Nov 21, 2012 at 8:14 AM, <brintoul at controlledthinking.com> wrote: >> >> > I have a multihomed machine that I would like to run the Python imaplib's >> > IMAP4 client on. I would like to be able to specify which interface the >> > underlying socket will bind to as its source address. How could I best do >> > this? >> >> You're referring to this function? >> >> http://docs.python.org/3.3/library/imaplib.html#imaplib.IMAP4 >> >> The docs suggest that you can simply pass it a parameter to specify >> the address to bind to. (Note that you bind to addresses, not >> interfaces. Figuring out which interface has which address is a >> separate issue.) >> > > Unless I'm reading that wrong, that's specifying the address/host to connect > to (the destination address) not the source address...
Ah, whoops! My bad. For some reason I was thinking that was creating a server socket. Sorry! Poking around in the source (imaplib.py) shows that it creates a socket here: class IMAP4: def _create_socket(self): return socket.create_connection((self.host, self.port)) Adding a third parameter to create_connection would do what you want. (Note that this is currently getting one parameter, not two.) http://docs.python.org/3.3/library/socket.html#socket.create_connection My recommendation: Subclass IMAP4 and override this one function. ChrisA -- http://mail.python.org/mailman/listinfo/python-list