lib: tevent: Use struct sockaddr_storage to cope with IPv6.
authorJeremy Allison <jra@samba.org>
Fri, 27 May 2016 18:43:31 +0000 (11:43 -0700)
committerJeremy Allison <jra@samba.org>
Sun, 29 May 2016 07:13:30 +0000 (09:13 +0200)
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Uri Simchoni <uri@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Sun May 29 09:13:30 CEST 2016 on sn-devel-144

lib/tevent/echo_server.c

index 102f7b4da79f6c671bd503b109bf10cf8d8a3c1f..6e7f1811f42fe3388be758ec2db389f5a1bf79fb 100644 (file)
@@ -66,7 +66,7 @@ struct accept_state {
        struct tevent_fd *fde;
        int listen_sock;
        socklen_t addrlen;
-       struct sockaddr addr;
+       struct sockaddr_storage addr;
        int sock;
 };
 
@@ -111,7 +111,9 @@ static void accept_handler(struct tevent_context *ev, struct tevent_fd *fde,
        }
        state->addrlen = sizeof(state->addr);
 
-       ret = accept(state->listen_sock, &state->addr, &state->addrlen);
+       ret = accept(state->listen_sock,
+                       (struct sockaddr *)&state->addr,
+                       &state->addrlen);
        if (ret == -1) {
                tevent_req_error(req, errno);
                return;
@@ -133,7 +135,7 @@ static int accept_recv(struct tevent_req *req, struct sockaddr *paddr,
                return -1;
        }
        if (paddr != NULL) {
-               *paddr = state->addr;
+               memcpy(paddr, &state->addr, state->addrlen);
        }
        if (paddrlen != NULL) {
                *paddrlen = state->addrlen;