]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
Refresh of fork
authorSean Hefty <sean.hefty@intel.com>
Mon, 16 Jul 2012 23:44:52 +0000 (16:44 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 16 Jul 2012 23:44:52 +0000 (16:44 -0700)
src/preload.c

index ca812929ed7d9c94d6371b3d38312ec8322f0887..22c4b657490bed993451a711432d68e14aac6390 100644 (file)
@@ -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);