X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=net.c;h=b2c9c43a81ad356ec021373c12d5c764fa5b76f4;hp=7f8d596d7d648511aa6478db75bc706159874be0;hb=cd8aecdb81f2ffb1a6e34a866d6156f8c915a467;hpb=78200714a07173565ecff4adc8d12b87895017f3 diff --git a/net.c b/net.c index 7f8d596d..b2c9c43a 100644 --- a/net.c +++ b/net.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Andre Noll + * Copyright (C) 2005-2008 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -19,11 +19,13 @@ #define AI_ADDRCONFIG 0 #endif +#include #include "para.h" #include "error.h" #include "net.h" #include "string.h" +#include "fd.h" /** Information about one encrypted connection. */ @@ -147,10 +149,11 @@ int makesock(unsigned l3type, unsigned l4type, int passive, { struct addrinfo *local = NULL, *src, *remote = NULL, *dst, hints; - char *port = make_message("%u", port_number); int rc, on = 1, sockfd = -1, socktype = sock_type(l4type); + char port[6]; /* port number has at most 5 digits */ + sprintf(port, "%u", port_number); /* Set up address hint structure */ memset(&hints, 0, sizeof(hints)); hints.ai_family = l3type; @@ -171,7 +174,7 @@ int makesock(unsigned l3type, unsigned l4type, int passive, if ((rc = getaddrinfo(host, port, &hints, passive ? &local : &remote))) { PARA_ERROR_LOG("can not resolve %s address %s#%s: %s.\n", layer4_name(l4type), - host? : (passive? "[loopback]" : "[localhost]"), + host? host : (passive? "[loopback]" : "[localhost]"), port, gai_strerror(rc)); return -E_ADDRESS_LOOKUP; } @@ -225,7 +228,7 @@ get_next_src: if (src == NULL && dst == NULL) { PARA_ERROR_LOG("can not create %s socket %s#%s.\n", - layer4_name(l4type), host? : (passive? + layer4_name(l4type), host? host : (passive? "[loopback]" : "[localhost]"), port); return -ERRNO_TO_PARA_ERROR(errno); } @@ -331,7 +334,7 @@ char *remote_name(int sockfd) */ struct in_addr extract_v4_addr(const struct sockaddr_storage *ss) { - struct in_addr ia = { 0 }; + struct in_addr ia = {.s_addr = 0}; if (ss->ss_family == AF_INET) ia.s_addr = ((struct sockaddr_in *)ss)->sin_addr.s_addr; @@ -344,31 +347,6 @@ struct in_addr extract_v4_addr(const struct sockaddr_storage *ss) return ia; } -/* - * Send out a buffer, resend on short writes. - * - * \param fd The file descriptor. - * \param buf The buffer to be sent. - * \param len The length of \a buf. - * - * \return Standard. In any case, the number of bytes actually sent is stored - * in \a len. - */ -static int sendall(int fd, const char *buf, size_t *len) -{ - size_t total = *len; - - assert(total); - *len = 0; - while (*len < total) { - int ret = send(fd, buf + *len, total - *len, 0); - if (ret == -1) - return -ERRNO_TO_PARA_ERROR(errno); - *len += ret; - } - return 1; -} - /** * Encrypt and send a binary buffer. * @@ -388,7 +366,7 @@ int send_bin_buffer(int fd, const char *buf, size_t len) crypt_function *cf = NULL; if (!len) - PARA_CRIT_LOG("%s", "len == 0\n"); + PARA_CRIT_LOG("len == 0\n"); if (fd + 1 <= cda_size) cf = crypt_data_array[fd].send; if (cf) { @@ -396,10 +374,10 @@ int send_bin_buffer(int fd, const char *buf, size_t len) /* RC4 may write more than len to the output buffer */ unsigned char *outbuf = para_malloc(ROUND_UP(len, 8)); (*cf)(len, (unsigned char *)buf, outbuf, private); - ret = sendall(fd, (char *)outbuf, &len); + ret = write_all(fd, (char *)outbuf, &len); free(outbuf); } else - ret = sendall(fd, buf, &len); + ret = write_all(fd, buf, &len); return ret; }