Address family not supported by protocol

The code passes the wrong destination address and wrong number of arguments to inet_pton(). (For the latter the compiler should have warned you about, btw)

This line

 inet_pton(AF_INET, "127.0.0.1", &server, sizeof(server));

should be

 inet_pton(AF_INET, "127.0.0.1", &server.sin_addr);

Verbatim from man inet_pton:

int inet_pton(int af, const char *src, void *dst);

AF_INET

[...] The address is converted to a struct in_addr and copied to dst, which must be sizeof(struct in_addr) (4) bytes (32 bits) long.


Not related to the problem, but also an issue, is that read() returns ssize_t not int.

The following lines shall be adjusted:

int n;
[...]
printf("%d, %s\n", n, buf);

to become:

ssize_t n;
[...]
printf("%zd, %s\n", n, buf);

Set the server address like this;

addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(host);
addr.sin_port = htons(port);