#include #include /* For struct sockaddr, socket, accept, listen, bind */ #include /* For struct sockaddr_in */ #include /* For htons, htonl, inet_pton */ #include #include #include /* For errno */ #include #include /* For close, read, write */ int main (int argc, char * argv []) { const char * host = "127.0.0.1"; uint16_t port = 12345; switch (argc) { case 3: port = strtoul(argv[2], NULL, 10); case 2: host = argv[1]; } struct sockaddr_in addr; addr.sin_family = AF_INET; /* need to set addr.sin_addr */ if (!inet_pton(AF_INET, host, &addr.sin_addr)) { perror("could not determine address"); return EXIT_FAILURE; } /* need to set addr.sin_port */ addr.sin_port = htons(port); int conn = socket(AF_INET, SOCK_STREAM, 0); if (conn < 0) { perror("could not create socket"); return EXIT_FAILURE; } if (connect(conn, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("could not connect"); close(conn); return EXIT_FAILURE; } const char * message = "Ciao!\n"; size_t len = strlen(message); size_t written = 0; while (written < len) { /* write to the socket object */ ssize_t w_res = write(conn, message + written, len - written); if (w_res < 0) { perror("could not write to socket"); close(conn); return EXIT_FAILURE; } written += w_res; } close(conn); }