From 9e6907fdc5e19ea5dfd3dd77b3bb8d2b89c064d8 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Mon, 16 Jul 2012 16:44:52 -0700 Subject: [PATCH] Refresh of fork --- src/preload.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/preload.c b/src/preload.c index ca812929..22c4b657 100644 --- a/src/preload.c +++ b/src/preload.c @@ -437,23 +437,24 @@ int accept(int socket, struct sockaddr *addr, socklen_t *addrlen) static int connect_fork(int socket, const struct sockaddr *addr, socklen_t addrlen) { + struct sockaddr_in *sin; + int fd, ret; uint32_t msg; - int rs, fd, ret; - fd = fd_getd(socket); - ret = real_connect(fd, addr, addrlen); - if (!ret) + fd_get(socket, &fd); + ret = real.connect(fd, addr, addrlen); + if (ret) return ret; - ret = real_read(fd, &msg, sizeof msg); + ret = real.read(fd, &msg, sizeof msg); if (ret != sizeof msg) return ret; - ret = transpose_socket(socket, &fd, fd_rsocket, rsocket, - real_close, rclose, real_getsockname, - real_getsockopt, rsetsockopt, - real_fcntl, rfcntl); - return connect(socket, addr, addrlen); + ret = transpose_socket(socket, &fd, fd_rsocket); + if (ret) + return ret; + + return rconnect(fd, addr, addrlen); } int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) @@ -461,7 +462,10 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) struct sockaddr_in *sin; int fd, ret; - if (fd_get(socket, &fd) == fd_rsocket) { + switch (fd_get(socket, &fd)) { + case fd_fork: + return connect_fork(socket, addr, addrlen); + case fd_rsocket: sin = (struct sockaddr_in *) addr; if (ntohs(sin->sin_port) > 1024) { ret = rconnect(fd, addr, addrlen); -- 2.45.2