473,394 Members | 1,567 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,394 software developers and data experts.

socket.connect() hangs in SYN_SENT state.

I'm having an issue where my program hangs while doing
socket.connect() for a couple minutes, then times out the connection
and crashes. I'm connecting to an apache2 process on the same machine,
for testing. When looking at netstat, the socket is in the SYN_SENT
state, like this:

$netstat -a -tcp
tcp 0 0 *:www *:*
LISTEN 7635/apache2
tcp 0 1 bukzor:38234 adsl-75-61-84-249.d:www
SYN_SENT 9139/python

Anyone know a general reason this might happen? Even better, a way to
fix it?
Doing a minimal amount of research, I found this in the netstat
manual:
The state SYN_SENT means that an application has made arequest for a
TCP session, but has not yet received the return SYN+ACK packet.

This would indicate it's a server issue, but it seems very stable when
I look at it via a browser.
Here's the server. If you browse to it, it documents the exported
functions:
http://bukzor.hopto.org/modpython/xmlrpc.py

Here's my test client that's hanging. Turn 'verbose' to True to get
more debugging info.

Expand|Select|Wrap|Line Numbers
  1. #!/usr/bin/env python
  2. from xmlrpclib import ServerProxy
  3.  
  4. s = ServerProxy("http://bukzor.hopto.org/modpython/xmlrpc.py",
  5. verbose=False)
  6.  
  7. print s.helloworld()
  8. print s.add(1,2)
  9. print s.subtract(1,2)
  10.  

Thanks,
--Buck
Jul 13 '08 #1
9 18516
On Sat, Jul 12, 2008 at 11:23 PM, bukzor <wo**********@gmail.comwrote:
I'm connecting to an apache2 process on the same machine,
for testing. When looking at netstat, the socket is in the SYN_SENT
state, like this:

$netstat -a -tcp
tcp 0 0 *:www *:* LISTEN 7635/apache2
tcp 0 1 bukzor:38234 adsl-75-61-84-249.d:www SYN_SENT 9139/python

Anyone know a general reason this might happen? Even better, a way to
fix it?
That socket connection is to a remote machine, not the same one. Your
test code works fine for me. The "hang then crash" (and I'm assuming
"crash" here means an uncaught exception) just means that your packets
are being silently ignored by whatever machine you're actually
attempting to connect to. It's possible that your machine has odd DNS
settings causing buzkor.hopto.org to resolve to the wrong address.

-Miles
Jul 13 '08 #2
On Jul 13, 1:14*am, Miles <semantic...@gmail.comwrote:
On Sat, Jul 12, 2008 at 11:23 PM, bukzor <workithar...@gmail.comwrote:
I'm connecting to an apache2 process on the same machine,
for testing. When looking at netstat, the socket is in the SYN_SENT
state, like this:
$netstat -a -tcp
tcp * * * *0 * * *0 *:www * * * * * * * ** *:* LISTEN * * *7635/apache2
tcp * * * *0 * * *1 bukzor:38234 * * * * * *adsl-75-61-84-249.d:www SYN_SENT * *9139/python
Anyone know a general reason this might happen? Even better, a way to
fix it?

That socket connection is to a remote machine, not the same one. *Your
test code works fine for me. *The "hang then crash" (and I'm assuming
"crash" here means an uncaught exception) just means that your packets
are being silently ignored by whatever machine you're actually
attempting to connect to. It's possible that your machine has odd DNS
settings causing buzkor.hopto.org to resolve to the wrong address.

-Miles
I'm connecting to my machine through the internet, and the resolved
URL of my router is what you're seeing above. If you run the code
above you'll see what I mean.

Thanks tho,
--Buck
Jul 13 '08 #3
On Sun, Jul 13, 2008 at 2:32 PM, bukzor <wo**********@gmail.comwrote:
On Jul 13, 1:14 am, Miles <semantic...@gmail.comwrote:
>On Sat, Jul 12, 2008 at 11:23 PM, bukzor <workithar...@gmail.comwrote:
I'm connecting to an apache2 process on the same machine,
for testing. When looking at netstat, the socket is in the SYN_SENT
state, like this:
$netstat -a -tcp
tcp 0 0 *:www *:* LISTEN 7635/apache2
tcp 0 1 bukzor:38234 adsl-75-61-84-249.d:www SYN_SENT 9139/python
Anyone know a general reason this might happen? Even better, a way to
fix it?

That socket connection is to a remote machine, not the same one. Your
test code works fine for me. The "hang then crash" (and I'm assuming
"crash" here means an uncaught exception) just means that your packets
are being silently ignored by whatever machine you're actually
attempting to connect to. It's possible that your machine has odd DNS
settings causing buzkor.hopto.org to resolve to the wrong address.

I'm connecting to my machine through the internet, and the resolved
URL of my router is what you're seeing above. If you run the code
above you'll see what I mean.
I did run the code, and as I said, it works fine. Your description of
the setup is not consistent. The netstat output unambiguously states
that a Python script on "buzkor" is attempting to open a connection to
the HTTP port on the "adsl" machine (and failing because "adsl" is not
responding). The problem here is not Python; you seem to be confused
about which machine is connecting to which.

-Miles
Jul 13 '08 #4
On Jul 13, 1:08 pm, Miles <semantic...@gmail.comwrote:
On Sun, Jul 13, 2008 at 2:32 PM, bukzor <workithar...@gmail.comwrote:
On Jul 13, 1:14 am, Miles <semantic...@gmail.comwrote:
On Sat, Jul 12, 2008 at 11:23 PM, bukzor <workithar...@gmail.comwrote:
I'm connecting to an apache2 process on the same machine,
for testing. When looking at netstat, the socket is in the SYN_SENT
state, like this:
$netstat -a -tcp
tcp 0 0 *:www *:* LISTEN 7635/apache2
tcp 0 1 bukzor:38234 adsl-75-61-84-249.d:www SYN_SENT 9139/python
Anyone know a general reason this might happen? Even better, a way to
fix it?
That socket connection is to a remote machine, not the same one. Your
test code works fine for me. The "hang then crash" (and I'm assuming
"crash" here means an uncaught exception) just means that your packets
are being silently ignored by whatever machine you're actually
attempting to connect to. It's possible that your machine has odd DNS
settings causing buzkor.hopto.org to resolve to the wrong address.
I'm connecting to my machine through the internet, and the resolved
URL of my router is what you're seeing above. If you run the code
above you'll see what I mean.

I did run the code, and as I said, it works fine. Your description of
the setup is not consistent. The netstat output unambiguously states
that a Python script on "buzkor" is attempting to open a connection to
the HTTP port on the "adsl" machine (and failing because "adsl" is not
responding). The problem here is not Python; you seem to be confused
about which machine is connecting to which.

-Miles

The problem only manifests about 1 in 20 runs. Below there's code for
a client that shows the problem 100% of the time.

The two URL's that I seem to be "confused" about point to the same IP.
Maybe this will make it clear:

PING bukzor.hopto.org (75.61.84.249) 56(84) bytes of data.
64 bytes from adsl-75-61-84-249.dsl.pltn13.sbcglobal.net
(75.61.84.249): icmp_seq=1 ttl=255 time=1.68 ms
64 bytes from adsl-75-61-84-249.dsl.pltn13.sbcglobal.net
(75.61.84.249): icmp_seq=2 ttl=255 time=0.493 ms
64 bytes from adsl-75-61-84-249.dsl.pltn13.sbcglobal.net
(75.61.84.249): icmp_seq=3 ttl=255 time=0.602 ms
Apparently netstat truncated the URL before. Here's the code I
mentioned:

Expand|Select|Wrap|Line Numbers
  1. #!/usr/bin/env python
  2. from xmlrpclib import ServerProxy
  3. from time import time
  4.  
  5. s = ServerProxy("http://bukzor.hopto.org/modpython/xmlrpc.py",
  6. verbose=True)
  7.  
  8. i = 0
  9. start = time()
  10. while True:
  11. print s.helloworld()
  12. print s.add(1,2)
  13. print s.subtract(1,2)
  14. i += 3
  15. print "AVG: %.2fs" % ((time() - start) / i)
  16.  
Thanks,
--Buck
Jul 14 '08 #5
On Sun, Jul 13, 2008 at 8:35 PM, bukzor <wo**********@gmail.comwrote:
The problem only manifests about 1 in 20 runs. Below there's code for
a client that shows the problem 100% of the time.

The two URL's that I seem to be "confused" about point to the same IP.
Maybe this will make it clear:

PING bukzor.hopto.org (75.61.84.249) 56(84) bytes of data.
64 bytes from adsl-75-61-84-249.dsl.pltn13.sbcglobal.net
(75.61.84.249): icmp_seq=1 ttl=255 time=1.68 ms
For me, buzkor.hopto.org resolves to 69.65.19.125, which I hope
explains why I thought you were confused, and increases my own
suspicion that DNS settings are to blame. I let the script run for
about five minutes without it failing.

Does your luck change if you use "localhost" or a numeric IP address
in the ServerProxy URL?

-Miles
Jul 14 '08 #6
On Sun, Jul 13, 2008 at 9:31 PM, Miles <se*********@gmail.comwrote:
On Sun, Jul 13, 2008 at 8:35 PM, bukzor <wo**********@gmail.comwrote:
>The problem only manifests about 1 in 20 runs. Below there's code for
a client that shows the problem 100% of the time.

The two URL's that I seem to be "confused" about point to the same IP.
Maybe this will make it clear:

PING bukzor.hopto.org (75.61.84.249) 56(84) bytes of data.
64 bytes from adsl-75-61-84-249.dsl.pltn13.sbcglobal.net
(75.61.84.249): icmp_seq=1 ttl=255 time=1.68 ms

For me, buzkor.hopto.org resolves to 69.65.19.125
Ahhh... "bukzor". Well, that makes sense. Pardon my temporary dyslexia.

-Miles
Jul 14 '08 #7
On Sat, Jul 12, 2008 at 11:23 PM, bukzor <wo**********@gmail.comwrote:
Anyone know a general reason this might happen? Even better, a way to
fix it?
Another reason that a socket can hang in the SYN_SENT state (besides
trying to connect to an unreachable host without getting an ICMP
destination-unreachable message in response): if the server's listen
queue is full, it will silently ignore SYN packets until there is room
in the queue.

Sorry again about the "bukzor" vs. "buzkor" thing. I don't know
what's causing your problem (and it's probably not a DNS issue after
all) but it's more likely to be a server issue than a client one.
Maybe your client has an unusually low socket timeout for some reason,
though; does increasing it (with socket.setdefaulttimeout) help? Mine
seems to default to about 75 seconds.

If you can't work out the root cause, but it only happens every once
in a while, you could try changing your client code to catch the
socket exception and retry a limited number of times.

-Miles
Jul 14 '08 #8
On Sun, Jul 13, 2008 at 10:29 PM, Miles <se*********@gmail.comwrote:
On Sat, Jul 12, 2008 at 11:23 PM, bukzor <wo**********@gmail.comwrote:
>Anyone know a general reason this might happen? Even better, a way to
fix it?

Maybe your client has an unusually low socket timeout for some reason,
though; does increasing it (with socket.setdefaulttimeout) help?
Never mind on that, as you already said that it hangs for about two
minutes. Clearly my reading comprehension and retention rate are at
an all-time low today.

low-signal-to-noise-ratio-ly yours,
Miles
Jul 14 '08 #9
On Jul 13, 6:31 pm, Miles <semantic...@gmail.comwrote:
On Sun, Jul 13, 2008 at 8:35 PM, bukzor <workithar...@gmail.comwrote:
The problem only manifests about 1 in 20 runs. Below there's code for
a client that shows the problem 100% of the time.
The two URL's that I seem to be "confused" about point to the same IP.
Maybe this will make it clear:
PING bukzor.hopto.org (75.61.84.249) 56(84) bytes of data.
64 bytes from adsl-75-61-84-249.dsl.pltn13.sbcglobal.net
(75.61.84.249): icmp_seq=1 ttl=255 time=1.68 ms

For me, buzkor.hopto.org resolves to 69.65.19.125, which I hope
explains why I thought you were confused, and increases my own
suspicion that DNS settings are to blame. I let the script run for
about five minutes without it failing.

Does your luck change if you use "localhost" or a numeric IP address
in the ServerProxy URL?

-Miles

It seems to work fairly perfectly If i use localhost or even my LAN IP
address, but starts to fail if I go beyond that.

You said you ran it for five minuts without error. Did it error out
after that? If you can't reproduce it, that would indicate something
else.
Jul 14 '08 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

11
by: anuradha.k.r | last post by:
hi, i am writing a socket program in python,both client side and server side.I've written the client side which is working perfectly fine(checked it against server program written in C).but as for...
2
by: Ted Burhan | last post by:
I was wondering if there is a way to adjust the timeout period when doing Socket.Connect() I have been looking at the docs, found nothing
0
by: yaron | last post by:
Hi, I want to use non-blocking socket operations (and not async socket operations) When i use this code : socket.Blocking = false; socket.Connect(remote); i get this error :
9
by: yaron | last post by:
Hi, 1. It seems to me that there is a bug when using non-blocking socket connect operation, because the LocalEndPoint, RemoteEndPoint of the Socket are nulls on the client side although that...
2
by: Ted Burhan | last post by:
I was wondering if there is a way to adjust the timeout period when doing Socket.Connect() I have been looking at the docs, found nothing
14
by: DaTurk | last post by:
I am makeing a Multicast server client setup and was wondering what the difference is between Socket.Connect, and Socket.Bind. It may be a stupid question, but I was just curious. Because I...
3
by: doc | last post by:
What will a flash xml client socket connect to? I have a working php TCP/IP server socket bound to a port >1023 and the flash client will not even connect to it. I can connect to it with non-xml...
0
by: Qui Sum | last post by:
I write ip/port scanner so users using search on our LAN know if the particular ftp is online or not. The class I write has the following structure: public class IPScanner { public...
3
by: A. W. Dunstan | last post by:
I'm creating a socket as follows: m_networkSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); m_networkSocket.LingerState = new LingerOption(true, 1);...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.