socket() No Route to host ??

Hello,

My program should connect to a server. here's the code :

int main(int argc, char *argv[]){
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock == -1){
        perror("socket()");
        exit(errno);
        }
    printf("retour socket = %d",sock);

    struct sockaddr *ad;
    ad = (struct sockaddr *)malloc(sizeof(struct sockaddr));
    ad->sa_len = strlen("172.16.192.1");
    ad->sa_family = AF_INET;
    strlcpy(ad->sa_data, "172.16.192.1", strlen("172.16.192.1"));

    int ret = connect(sock, (struct sockaddr *)&ad, sizeof(ad));
    printf("retour connect = %d",ret);
    if(ret == -1){
        perror("socket()");
        exit(errno);
        }
    return 0;
    }

the program answers :
socket(): No route to host

or socket() connection timeout

in both cases socket() returns the integer 3 and connect() returns -1

I must say i have no issue with ping traceroute or even telnet.
so i really dont understant what's happening.

thank you :slight_smile:

It expects a "struct sockaddr_in", not a string! Therefore it doesn't understand your address. It also expects a port number to connect to, not just an IP address.

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

...

struct sockaddr_in addr;

addr.sin_family=AF_INET;
// for example, port 80 is HTTP
addr.sin_port=htons(80);
addr.sin_addr=inet_addr("172.16.192.1");
memset(addr.sin_zero, 0, sizeof(addr.sin_zero));

int ret = connect(sock, (struct sockaddr *)&addr, sizeof(addr));