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

Sockets in python

P: n/a

Reciently i wrote a simple client (in twisted) using Reconnecting
Factory.
That client logins to my socket server.. and that`s it.

Interesting thing is that it is seems that twisted client,
sends some ping on a TCP level without sending any data to the
socket directly.
Because when i pull out cord from the ethernet card simulating
network falure, client in about 10-15 seconds determines that
connection lost!! (pretty cool)
While my server thinks that client is connected.
I know that sockets ware designed to behave so.. to be tolarate
to
network problems, but in my case this is bad.. i want it to
behave like in twisted.

I have searched in a socketmodule.c from python source code for a
magic variables, but did not found anything that fits.

I am using SO_KEEPALIVE on server - but documentations says
it will only ping (and so timed outed) in a few hours.

How do i make my server act the same way as twisted client?
(to make some sort of a low level checking if a connections is
broken without actualy sending anything to socket)

The only suspicious lines intwisted is seems :

---------------------------------------------------------------------------
SO_UPDATE_ACCEPT_CONTEXT = 0x700B
SO_UPDATE_CONNECT_CONTEXT = 0x7010

--------------------------------------------------------------------------
try:
acc_sock.setsockopt(socket.SOL_SOCKET,
SO_UPDATE_ACCEPT_CONTEXT, struct.pack("I", handle))
except socket.error, se:
self.transport.acceptErr(ret, bytes)
else:
self.transport.acceptDone(acc_sock,
acc_sock.getpeername())

--------------------------------------------------------------------------
if have_connectex:
try:
sock.setsockopt(socket.SOL_SOCKET,
SO_UPDATE_CONNECT_CONTEXT, "")
except socket.error, se:

self.transport.connectErr(failure.Failure(error.Co nnectError()))
self.transport.connectDone()
---------------------------------------------------------------------------

I tried this all but it trows an exeption and not working and also
i have no i idea what
SO_UPDATE_ACCEPT_CONTEXT , andSO_UPDATE_CONNECT_CONTEXT means.

Huh. Any Suggestions?

Sep 29 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
OneMustFall wrote:
Reciently i wrote a simple client (in twisted) using Reconnecting
Factory.
That client logins to my socket server.. and that`s it.

Interesting thing is that it is seems that twisted client,
sends some ping on a TCP level without sending any data to the
socket directly.
Because when i pull out cord from the ethernet card simulating
network falure, client in about 10-15 seconds determines that
connection lost!! (pretty cool)
While my server thinks that client is connected.
What's your set-up and which cord are you pulling?
--
--Bryan
Oct 3 '06 #2

P: n/a

What's your set-up and which cord are you pulling?
Well i now i think the clue is in the OS, i have sniffed and it seems
that Twisted have no magic.
It is seems that i simply tested things in a wrong way -
when i pulled cord from ethernet card windows determined that network
lost and started to closing all sockets opened to that network (and so
EINVAL or other OS error raised when twisted tryed to read wrom that
socket),
while the server did had a network - and it was right thing that server
was thinking that socket is alive.

Oct 3 '06 #3

P: n/a
OneMustFall a écrit :
>
>What's your set-up and which cord are you pulling?

Well i now i think the clue is in the OS, i have sniffed and it seems
that Twisted have no magic.
It is seems that i simply tested things in a wrong way -
when i pulled cord from ethernet card windows determined that network
lost and started to closing all sockets opened to that network (and so
EINVAL or other OS error raised when twisted tryed to read wrom that
socket),
while the server did had a network - and it was right thing that server
was thinking that socket is alive.
Stupid Windows behaviour btw! I hate that, it makes testing code
stability for temporary network lags much much harder to do.

And don't get me started on when we reboot the switch which causes all
open sockets on my computer to fail, even though the reboot only takes a
few seconds and though the internet connection doesn't change.
Oct 3 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.