By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,314 Members | 1,722 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,314 IT Pros & Developers. It's quick & easy.

tcp client socket bind problem

P: n/a
I have a linux box with multiple ip addresses. I want to make my
python client connect from one of the ip addresses. Here is my code,
no matter what valid information I put in the bind it always comes
from the default ip address on the server. Am I doing something wrong?
-------------
#!/usr/bin/python

import socket

host = "server"
port = 1190

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.bind(("<ipalias>",0))
sock.connect((host, port))
-------------
Mar 10 '08 #1
Share this Question
Share on Google+
5 Replies


P: n/a
na*****@gmail.com wrote:
I have a linux box with multiple ip addresses. I want to make my
python client connect from one of the ip addresses. Here is my code,
no matter what valid information I put in the bind it always comes
from the default ip address on the server. Am I doing something wrong?

-------------
#!/usr/bin/python

import socket

host = "server"
port = 1190

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.bind(("<ipalias>",0))
sock.connect((host, port))
-------------
Looks good to me. Just to verify it, I added 127.1.2.3 as an address to
lo (ip addr add 127.1.2.3/8 dev lo broadcast 127.255.255.255), and...
>>import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("127.1.2.3",0))
sock.connect(("127.0.0.1",80))
In another shell:
tolot:~lsof -c python -a -i -nP
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
[...]
python 1287 tolot 3u IPv4 3553610 TCP 127.1.2.3:38329->127.0.0.1:80 (ESTABLISHED)

Looks correct. This is using Linux 2.6.23. So, if you're doing something
wrong, it's nothing obvious to me.

Marc
Mar 10 '08 #2

P: n/a
On Mar 10, 9:40*am, Marc Christiansen <use...@solar-empire.dewrote:
nata...@gmail.com wrote:
I have a linux box with multiple ip addresses. I want to make my
python client connect from one of the ip addresses. Here is my code,
no matter what valid information I put in the bind it always comes
from the default ip address on the server. Am I doing something wrong?
-------------
#!/usr/bin/python
import socket
host = "server"
port = 1190
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("<ipalias>",0))
sock.connect((host, port))
-------------

Looks good to me. Just to verify it, I added 127.1.2.3 as an address to
lo (ip addr add 127.1.2.3/8 dev lo broadcast 127.255.255.255), and...

*>>import socket
*>>sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
*>>sock.bind(("127.1.2.3",0))
*>>sock.connect(("127.0.0.1",80))

In another shell:
tolot:~lsof -c python -a -i -nP
COMMAND *PID *USER * FD * TYPE *DEVICE SIZE NODE NAME
[...]
python *1287 tolot * *3u *IPv4 3553610 * * * TCP 127.1.2.3:38329->127.0.0.1:80 (ESTABLISHED)
help string:
Bind the socket to a local address. For IP sockets, the address is a
pair (host, port); the host must refer to the local host.

docs:
Bind the socket to address.

Wikipedia:
Before a socket may accept incoming connections, it must be bound.

PHP.net:
Binds the name given in address to the socket described by socket .
This has to be done before a connection is be established using
socket_connect() or socket_listen().
This function must be used on the socket before socket_connect().

Mar 10 '08 #3

P: n/a
ca********@gmail.com wrote:
>
On Mar 10, 9:40*am, Marc Christiansen <use...@solar-empire.dewrote:
>nata...@gmail.com wrote:
I have a linux box with multiple ip addresses. I want to make my
python client connect from one of the ip addresses. Here is my code,
no matter what valid information I put in the bind it always comes
from the default ip address on the server. Am I doing something wrong?
...

help string:
Bind the socket to a local address. For IP sockets, the address is a
pair (host, port); the host must refer to the local host.

docs:
Bind the socket to address.

Wikipedia:
Before a socket may accept incoming connections, it must be bound.

PHP.net:
Binds the name given in address to the socket described by socket .
This has to be done before a connection is be established using
socket_connect() or socket_listen().
This function must be used on the socket before socket_connect().
That's all true. So what was your point? How does this help the original
poster?
--
Tim Roberts, ti**@probo.com
Providenza & Boekelheide, Inc.
Mar 11 '08 #4

P: n/a
On Mar 11, 2:19*am, Tim Roberts <t...@probo.comwrote:
castiro...@gmail.com wrote:
On Mar 10, 9:40*am, Marc Christiansen <use...@solar-empire.dewrote:
nata...@gmail.com wrote:
I have a linux box with multiple ip addresses. I want to make my
python client connect from one of the ip addresses. Here is my code,
no matter what valid information I put in the bind it always comes
from the default ip address on the server. Am I doing something wrong?
...
help string:
Bind the socket to a local address. *For IP sockets, the address is a
pair (host, port); the host must refer to the local host.
docs:
Bind the socket to address.
Wikipedia:
Before a socket may accept incoming connections, it must be bound.
PHP.net:
Binds the name given in address to the socket described by socket .
This has to be done before a connection is be established using
socket_connect() or socket_listen().
This function must be used on the socket before socket_connect().

That's all true. *So what was your point? *How does this help the original
poster?
Confidence-- a second opinion of what the docs say. Then, something
of a criticism of the docs.
Mar 12 '08 #5

P: n/a
On Sun, 09 Mar 2008 22:21:59 -0700, natambu wrote:
I have a linux box with multiple ip addresses. I want to make my python
client connect from one of the ip addresses. Here is my code, no matter
what valid information I put in the bind it always comes from the
default ip address on the server. Am I doing something wrong?
-------------
#!/usr/bin/python

import socket

host = "server"
port = 1190

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.bind(("<ipalias>",0))
sock.connect((host, port))
-------------
I'd've expected that to work.

What does your routing table look like? You can view it with "netstat -
nr". I believe when a Linux network interface is ifconfig'd, the kernel
will add a route for that interface based on the netmask in the ifconfig,
but you could conceivably have another route that is broader overriding
the specific route.

Mar 12 '08 #6

This discussion thread is closed

Replies have been disabled for this discussion.