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

c, errno, network-programming, networking, tcp

Solution

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.

Problem

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 When calling TCP connect (Non blocking with timeout of 60 seconds) to IP `174.X.X.X` is always success . But TCP connect to same server with ip `54.x.x.x` is failing (most of the times) with errno 115 measn operation in progress. Can you please explain me what are the possible reason for errno 115 OS : Linux My TCP conenct code is as below ``` tcp_connect(......) { int iValOpt = 0; int iLength= 0; fcnt((int)(long)SockID,F_SETFL_O_NONBLOCK); ret = connect (sockID,(struct sockaddr*)pstSockAdr,uiSockLen); if (ret < 0) { if (errno == EINPROGRESS) { stTv.tv_sec = 60; stTv.tv_usec = 0; FD_ZERO(&write_fd); FD_SET(sockID,&write_fd); iLength = sizeof(int); if (0 < select (sockID+1) , NULL,&write_fd,NULL,&stTv); { if(0 > getsockopt(sockID,SOL_SOCKET,SO_ERROR,(void*)(&iValOpt),&iLength)) { return -1 } if (0 != iValOpt) { return -1; } return success; } else { return -1; } } else { return -1; } } return success; } ```

Original source