#include #include #include #include #include #include #include #include #include int main() { struct addrinfo hints; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = 0; hints.ai_protocol = 0; struct addrinfo *result; int ret = getaddrinfo("127.0.0.1", "24242", &hints, &result); if (ret == -1) { err(EXIT_FAILURE, "failed getting addr info"); } int tcp_sock = -1; for (struct addrinfo *rp = result; rp != NULL; rp = rp->ai_next) { int s = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); if (s == -1) continue; if (connect(s, rp->ai_addr, rp->ai_addrlen) != -1) { tcp_sock = s; break; } close(s); } freeaddrinfo(result); if (tcp_sock == -1) { err(EXIT_FAILURE, "couldn't connect to socket"); return -1; } int c; while ((c = fgetc(stdin)) != EOF) { char cb = c; int ret = write(tcp_sock, &cb, 1); if (ret == -1) { err(EXIT_FAILURE, "failed writing to socket"); } ret = read(tcp_sock, &cb, 1); if (ret == -1) { err(EXIT_FAILURE, "failed reading from socket"); } fprintf(stdout, "%c", cb); } close(tcp_sock); }