]> git.meshlink.io Git - utcp/commitdiff
Change utcp_timeout() to return a struct timeval.
authorGuus Sliepen <guus@meshlink.io>
Fri, 5 Dec 2014 21:08:21 +0000 (22:08 +0100)
committerGuus Sliepen <guus@meshlink.io>
Fri, 5 Dec 2014 21:08:21 +0000 (22:08 +0100)
This is what MeshLink uses internally as well, and prevents confusion over which units the old int
return value had.

test.c
utcp.c
utcp.h

diff --git a/test.c b/test.c
index 757364f0f7e63432bf387ce6ce7a2637e45a9370..922099a9009dc83c386417a84fa2c2b8ac848628 100644 (file)
--- a/test.c
+++ b/test.c
@@ -100,10 +100,10 @@ int main(int argc, char *argv[]) {
        };
 
        char buf[102400];
-       int timeout = utcp_timeout(u);
+       struct timeval timeout = utcp_timeout(u);
 
        while(dir) {
-               poll(fds, 2, timeout);
+               poll(fds, 2, timeout.tv_sec * 1000 + timeout.tv_usec / 1000);
 
                if(fds[0].revents) {
                        int len = read(0, buf, sizeof buf);
diff --git a/utcp.c b/utcp.c
index 391706f1d1abdee0ecf8a8edf7b2dc45f6cdd40d..2ef56ea76a451558d19d6963679f1d9c5a7e8b6c 100644 (file)
--- a/utcp.c
+++ b/utcp.c
@@ -1061,7 +1061,7 @@ static void retransmit(struct utcp_connection *c) {
  * The return value is the time to the next timeout in milliseconds,
  * or maybe a negative value if the timeout is infinite.
  */
-int utcp_timeout(struct utcp *utcp) {
+struct timeval utcp_timeout(struct utcp *utcp) {
        struct timeval now;
        gettimeofday(&now, NULL);
        struct timeval next = {now.tv_sec + 3600, now.tv_usec};
@@ -1111,9 +1111,7 @@ int utcp_timeout(struct utcp *utcp) {
 
        struct timeval diff;
        timersub(&next, &now, &diff);
-       if(diff.tv_sec < 0)
-               return 0;
-       return diff.tv_sec * 1000 + diff.tv_usec / 1000;
+       return diff;
 }
 
 struct utcp *utcp_init(utcp_accept_t accept, utcp_pre_accept_t pre_accept, utcp_send_t send, void *priv) {
diff --git a/utcp.h b/utcp.h
index 53a107fd13a20196ce7485b93a754771d2a36b62..7ebca734bfa36f650b55f829a3e8f80c2def80d1 100644 (file)
--- a/utcp.h
+++ b/utcp.h
@@ -23,6 +23,8 @@
 #include <unistd.h>
 #include <stdint.h>
 #include <stdbool.h>
+// TODO: Windows
+#include <sys/time.h>
 
 #ifndef UTCP_INTERNAL
 struct utcp {
@@ -56,7 +58,7 @@ extern ssize_t utcp_recv(struct utcp *utcp, const void *data, size_t len);
 extern int utcp_close(struct utcp_connection *connection);
 extern int utcp_abort(struct utcp_connection *connection);
 extern int utcp_shutdown(struct utcp_connection *connection, int how);
-extern int utcp_timeout(struct utcp *utcp);
+extern struct timeval utcp_timeout(struct utcp *utcp);
 extern void utcp_set_recv_cb(struct utcp_connection *connection, utcp_recv_t recv);
 extern void utcp_set_poll_cb(struct utcp_connection *connection, utcp_poll_t poll);