darwin-rx-netreceive-fix-20090605
[openafs.git] / src / rx / DARWIN / rx_knet.c
index aac3023..6d621a4 100644 (file)
@@ -53,7 +53,6 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
     thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL);
 #endif
 #ifdef AFS_DARWIN80_ENV
-#if 1
     resid = *alength;
     memset(&msg, 0, sizeof(struct msghdr));
     msg.msg_name = &ss;
@@ -74,32 +73,6 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
     }
     mbuf_freem(m);
 #else
-    resid = *alength;
-    printf("Want to read %d bytes...", resid);
-    for (i=0; i < nvecs && resid; i++) {
-       if (resid < iov[i].iov_len)
-          iov[0].iov_len = resid;
-       resid -= iov[i].iov_len;
-    }
-    printf("Using %d/%d iovs\n", i, nvecs);
-    nvecs = i;
-    rlen = 0;
-    memset(&msg, 0, sizeof(struct msghdr));
-    msg.msg_name = &ss;
-    msg.msg_namelen = sizeof(struct sockaddr_storage);
-    msg.msg_iov = &iov[0];
-    msg.msg_iovlen = nvecs;
-    sa =(struct sockaddr_in *) &ss;
-    code = sock_receive(asocket, &msg, 0, &rlen);
-    resid = *alength;
-    if (resid != rlen)
-    printf("recieved %d bytes\n", rlen);
-    if (resid > rlen)
-       resid -= rlen;
-    else
-       resid = 0;
-#endif
-#else
 
     u.uio_iov = &iov[0];
     u.uio_iovcnt = nvecs;
@@ -122,6 +95,11 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
        return code;
     *alength -= resid;
     if (sa) {
+       if (sa->sa_family == AF_INET) {
+           if (addr)
+               *addr = *(struct sockaddr_in *)sa;
+       } else
+           printf("Unknown socket family %d in NetReceive\n", sa->sa_family);
 #ifndef AFS_DARWIN80_ENV
        FREE(sa, M_SONAME);
 #endif