?
=?ISO-8859-1?Q?Thomas_Herv=E9?=
My problem is not really python specific but as I do my implementation
in python I hope someone here can help me.
I have two programs that talk through a socket. Here is the code :
<server>
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.settimeout(5.0)
sock.bind(("", port)
# We only handle one connection
sock.listen(1)
while 1:
newsock, address = sock.accept()
handle(newsock, address)
def handle(sock, address) :
print "Connection from", address
dataReceived = newsock.recv(1024)
while 1:
try:
newsock.send(data)
except socket.timeout, err:
print "Connection timeout %s" % err
break
except socket.error, err:
print "Connection broken %s" % err
break
</server>
<client>
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5.0)
sock.connect((host, port))
sock.send("Gimme a piece of information, please\r\n")
while 1:
r, w, e = select.select(, [], [], 1.0)
if r != []:
handle_connection(s)
def handle_connection(sock):
try:
response_data = sock.recv(1024)
except socket.timeout:
print "Socket timeout"
return
manage(response_data)
</client>
Ok I hope it's clear. My problem is that "select" only tests if there's
data on the socket, and not the state of the socket. I want to be able
to know if socket is "alive" or something like that. But I don't want
to make "send" in the client (stay passive). Then, if I know that my
socket is closed or my link down, I can try to reconnect periodically.
I would rewrite the while in the client like that :
<client>
while 1:
if not test_connect(s) :
reconnect(s)
# else continue normally
r, w, e = select.select(, [], [], 1.0)
if r != []:
handle_connection(s)
</client
My env: python2.3, linux/win32.
Thanks in advance,
in python I hope someone here can help me.
I have two programs that talk through a socket. Here is the code :
<server>
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.settimeout(5.0)
sock.bind(("", port)
# We only handle one connection
sock.listen(1)
while 1:
newsock, address = sock.accept()
handle(newsock, address)
def handle(sock, address) :
print "Connection from", address
dataReceived = newsock.recv(1024)
while 1:
try:
newsock.send(data)
except socket.timeout, err:
print "Connection timeout %s" % err
break
except socket.error, err:
print "Connection broken %s" % err
break
</server>
<client>
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5.0)
sock.connect((host, port))
sock.send("Gimme a piece of information, please\r\n")
while 1:
r, w, e = select.select(
if r != []:
handle_connection(s)
def handle_connection(sock):
try:
response_data = sock.recv(1024)
except socket.timeout:
print "Socket timeout"
return
manage(response_data)
</client>
Ok I hope it's clear. My problem is that "select" only tests if there's
data on the socket, and not the state of the socket. I want to be able
to know if socket is "alive" or something like that. But I don't want
to make "send" in the client (stay passive). Then, if I know that my
socket is closed or my link down, I can try to reconnect periodically.
I would rewrite the while in the client like that :
<client>
while 1:
if not test_connect(s) :
reconnect(s)
# else continue normally
r, w, e = select.select(
if r != []:
handle_connection(s)
</client
My env: python2.3, linux/win32.
Thanks in advance,