Diff for /libaitrpc/src/aitrpc.c between versions 1.15 and 1.15.6.1

version 1.15, 2014/01/28 14:05:43 version 1.15.6.1, 2014/12/11 01:15:34
Line 214  rpc_Write(int sock, int type, int flags, sockaddr_t *  Line 214  rpc_Write(int sock, int type, int flags, sockaddr_t * 
 {  {
         struct pollfd pfd;          struct pollfd pfd;
         int ret = 0, len = 0;          int ret = 0, len = 0;
           ait_val_t v = AIT_VAL_INIT;
           struct ether_header *eh;
   
           if (type == SOCK_BPF && sa) {
                   AIT_SET_BUF(&v, NULL, blen + sizeof(struct ether_header));
                   eh = (struct ether_header*) AIT_GET_BUF(&v);
                   memcpy(eh->ether_dhost, LLADDR(&sa->sdl), ETHER_ADDR_LEN);
                   eh->ether_type = htons(RPC_DEFPORT);
                   memcpy(eh + 1, buf, blen);
                   blen += sizeof(struct ether_header);
           }
   
         pfd.fd = sock;          pfd.fd = sock;
         pfd.events = POLLOUT;          pfd.events = POLLOUT;
         for (len = blen; len > 0; len -= ret, buf += ret) {          for (len = blen; len > 0; len -= ret, buf += ret) {
Line 228  rpc_Write(int sock, int type, int flags, sockaddr_t *  Line 239  rpc_Write(int sock, int type, int flags, sockaddr_t * 
                                 rpc_SetErr(EPIPE, "Disconnected RPC session\n");                                  rpc_SetErr(EPIPE, "Disconnected RPC session\n");
                         else                          else
                                 LOGERR;                                  LOGERR;
                           if (type == SOCK_BPF)
                                   AIT_FREE_VAL(&v);
                         return -1;                          return -1;
                 }                  }
                 if (type == SOCK_STREAM)                  if (type == SOCK_STREAM)
                         ret = send(sock, buf, len, flags);                          ret = send(sock, buf, len, flags);
                else if (sa)                else if (type == SOCK_BPF && sa) {
                         ret = write(sock, AIT_GET_BUF(&v), AIT_LEN(&v));
                 } else if (sa)
                         ret = sendto(sock, buf, len, flags, &sa->sa, sa->sa.sa_len);                          ret = sendto(sock, buf, len, flags, &sa->sa, sa->sa.sa_len);
                 else {                  else {
                         rpc_SetErr(EINVAL, "Invalid argument(s)!");                          rpc_SetErr(EINVAL, "Invalid argument(s)!");
                           if (type == SOCK_BPF)
                                   AIT_FREE_VAL(&v);
                         return -1;                          return -1;
                 }                  }
                 if (ret == -1) {                  if (ret == -1) {
                         LOGERR;                          LOGERR;
                           if (type == SOCK_BPF)
                                   AIT_FREE_VAL(&v);
                         return -1;                          return -1;
                 }                  }
                if (!ret)       /* EOF */                if (!ret) {        /* EOF */
                         if (type == SOCK_BPF)
                                 AIT_FREE_VAL(&v);
                         return 0;                          return 0;
                   }
         }          }
         ret = blen - len;          ret = blen - len;
         if (ret != blen) {          if (ret != blen) {
                 rpc_SetErr(EPROCUNAVAIL, "RPC request, should be send %d bytes, "                  rpc_SetErr(EPROCUNAVAIL, "RPC request, should be send %d bytes, "
                                "really sended %d bytes", len, ret);                                "really sended %d bytes", blen, ret);
                 if (type == SOCK_BPF)
                         AIT_FREE_VAL(&v);
                 return -1;                  return -1;
         }          }
   
           if (type == SOCK_BPF)
                   AIT_FREE_VAL(&v);
         return ret;          return ret;
 }  }

Removed from v.1.15  
changed lines
  Added in v.1.15.6.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>