#include "net_tools.h" int create_tcp_client(char* host, char* service) { int err, sock; struct addrinfo conf; struct addrinfo *result, *cursor; memset(&conf, 0, sizeof(struct addrinfo)); conf.ai_family = AF_UNSPEC; conf.ai_socktype = SOCK_STREAM; conf.ai_flags = 0; conf.ai_protocol = 0; err = getaddrinfo(host, service, &conf, &result); if (err != 0) { fprintf(stderr, "Error with getaddrinfo()\n"); exit(EXIT_FAILURE); } for (cursor = result; cursor != NULL; cursor = cursor->ai_next) { sock = socket(cursor->ai_family, cursor->ai_socktype, cursor->ai_protocol); if (sock == -1) continue; if (connect(sock, cursor->ai_addr, cursor->ai_addrlen) != -1) break; close(sock); } if (cursor == NULL) { fprintf(stderr, "No connect worked\n"); exit(EXIT_FAILURE); } freeaddrinfo(result); return sock; } int read_entity(int fd, void* entity, int size) { int remaining = size; int total_read = 0; while (remaining > 0) { int nread = read(fd, ((char*)entity)+total_read, remaining); if (nread == -1) { return nread; } remaining -= nread; total_read += nread; } return total_read; } void fill_buffer(size_t* written, char* dest, void *src, size_t n) { memcpy(dest+*written, src, n); *written += n; }