Avoid calling time(NULL).
[tinc] / src / net_socket.c
index cb2a6df..5332ed2 100644 (file)
@@ -294,7 +294,7 @@ void retry_outgoing(outgoing_t *outgoing) {
 void finish_connecting(connection_t *c) {
        logger(DEBUG_CONNECTIONS, LOG_INFO, "Connected to %s (%s)", c->name, c->hostname);
 
-       c->last_ping_time = time(NULL);
+       c->last_ping_time = now.tv_sec;
        c->status.connecting = false;
 
        send_id(c);
@@ -349,6 +349,9 @@ static void do_outgoing_pipe(connection_t *c, char *command) {
 }
 
 static void handle_meta_write(connection_t *c) {
+       if(c->outbuf.len <= c->outbuf.offset)
+               return;
+
        ssize_t outlen = send(c->socket, c->outbuf.data + c->outbuf.offset, c->outbuf.len - c->outbuf.offset, 0);
        if(outlen <= 0) {
                if(!errno || errno == EPIPE) {
@@ -377,7 +380,7 @@ static void handle_meta_io(void *data, int flags) {
 
                int result;
                socklen_t len = sizeof result;
-               getsockopt(c->socket, SOL_SOCKET, SO_ERROR, &result, &len);
+               getsockopt(c->socket, SOL_SOCKET, SO_ERROR, (void *)&result, &len);
 
                if(!result)
                        finish_connecting(c);
@@ -505,7 +508,7 @@ begin:
        c->outdigest = myself->connection->outdigest;
        c->outmaclength = myself->connection->outmaclength;
        c->outcompression = myself->connection->outcompression;
-       c->last_ping_time = time(NULL);
+       c->last_ping_time = now.tv_sec;
 
        connection_add(c);
 
@@ -568,7 +571,7 @@ void handle_new_meta_connection(void *data, int flags) {
        c->address = sa;
        c->hostname = sockaddr2hostname(&sa);
        c->socket = fd;
-       c->last_ping_time = time(NULL);
+       c->last_ping_time = now.tv_sec;
 
        logger(DEBUG_CONNECTIONS, LOG_NOTICE, "Connection from %s", c->hostname);
 
@@ -607,7 +610,7 @@ void handle_new_unix_connection(void *data, int flags) {
        c->address = sa;
        c->hostname = xstrdup("localhost port unix");
        c->socket = fd;
-       c->last_ping_time = time(NULL);
+       c->last_ping_time = now.tv_sec;
 
        logger(DEBUG_CONNECTIONS, LOG_NOTICE, "Connection from %s", c->hostname);