TCP Connect error 115 Operation in Progress What is the Cause?

后端 未结 2 1500
我在风中等你
我在风中等你 2020-12-14 20:28

My application creats a TCP connection, This is working normaly. But in one network server has many IP say

  • 174.X.X.X
  • 54.x.x.x like this
2条回答
  •  鱼传尺愫
    2020-12-14 20:49

    Based on your information:

    • You are trying to do a connect() to 54.x.x.x
    • The socket is non-blocking
    • Connection timeout is 60 sec

    First, if you look into your /usr/include/asm-generic/errno.h you'll see the following:

    #define EINPROGRESS     115     /* Operation now in progress */
    

    It means an existing operation on the socket is in progress. Since, you said you are doing a connect() call, lets do a man connect:

    EINPROGRESS
    
    The socket is nonblocking and the connection cannot be completed 
    immediately. It is possible to select(2) or poll(2) for completion by
    selecting the socket for writing. After select(2) indicates
    writability, use getsockopt(2) to read the SO_ERROR option at level
    SOL_SOCKET to determine whether connect() completed successfully
    (SO_ERROR is zero) or unsuccessfully (SO_ERROR is one of the usual
    error codes listed here, explaining the reason for the failure).
    

    So, the best guess would be that the TCP 3-way handshake (your connect() call to 54.x.x.x IP address) is taking longer than expected to complete. Since the connect() operation is already in progress, any subsequent operation on the socket is resulting into EINPROGRESS error code. As suggested in the man page, try to use select() or poll() to check if your socket is ready to use (to perform read() or write() calls).

    You can pin-point what is preventing your TCP handshake to complete by capturing and analyzing the traffic to/from your own machine and 54.x.x.x. The best tool to help you with this is called WireShark. Good luck.

    TCP 3 way handshake

提交回复
热议问题