On 04/02/15 14:07, Stuart Haslam wrote:
  {
-       odp_packet_t pkt;
        uint8_t *frame;
        uint32_t frame_len;
-       unsigned i;
-       unsigned flags;
        int sockfd;
-       int nb_tx;
        int ret;
+       unsigned i, n;
sockfd = pkt_sock->sockfd;
-       flags = MSG_DONTWAIT;
        i = 0;
        while (i < len) {
-               pkt = pkt_table[i];
+               frame = odp_packet_l2_ptr(pkt_table[i], &frame_len);
- frame = odp_packet_l2_ptr(pkt, &frame_len);
-
-               ret = send(sockfd, frame, frame_len, flags);
+               ret = send(sockfd, frame, frame_len, MSG_DONTWAIT);
                if (odp_unlikely(ret == -1)) {
-                       if (odp_likely(errno == EAGAIN)) {
-                               flags = 0;      /* blocking for next rounds */
-                               continue;       /* resend buffer */
-                       } else {
-                               break;
+                       if (i == 0 && SOCK_ERR_REPORT(errno)) {
+                               __odp_errno = errno;
+                               ODP_ERR("send(basic): %s\n", strerror(errno));
+                               return -1;
                        }
+                       break;
                }
i++;
-       }                       /* end while */
-       nb_tx = i;
+       }
- for (i = 0; i < len; i++)
-               odp_packet_free(pkt_table[i]);
+       for (n = 0; n < i; ++n)
+               odp_packet_free(pkt_table[n]);
- return nb_tx;
+       return i;
  }
/*
@@ -383,9 +379,7 @@ int send_pkt_sock_mmsg(pkt_sock_t *const pkt_sock,
        struct iovec iovecs[ODP_PACKET_SOCKET_MAX_BURST_TX];
        int ret;
        int sockfd;
-       unsigned i;
-       unsigned sent_msgs = 0;
-       unsigned flags;
+       unsigned i, n;
if (odp_unlikely(len > ODP_PACKET_SOCKET_MAX_BURST_TX))
                return -1;
@@ -401,17 +395,24 @@ int send_pkt_sock_mmsg(pkt_sock_t *const pkt_sock,
                msgvec[i].msg_hdr.msg_iovlen = 1;
        }
- flags = MSG_DONTWAIT;
-       for (i = 0; i < len; i += sent_msgs) {
-               ret = sendmmsg(sockfd, &msgvec[i], len - i, flags);
-               sent_msgs = ret > 0 ? (unsigned)ret : 0;
-               flags = 0;      /* blocking for next rounds */
+       for (i = 0; i < len; ) {
+               ret = sendmmsg(sockfd, &msgvec[i], len - i, MSG_DONTWAIT);
+               if (odp_unlikely(ret == -1)) {
+                       if (i == 0 && SOCK_ERR_REPORT(errno)) {
+                               __odp_errno = errno;
+                               ODP_ERR("sendmmsg(): %s\n", strerror(errno));
+                               return -1;
+                       }
+                       break;
+               }
+
+               i += (unsigned)ret;
it looks like i should be simple int not unsigned.

Maxim.
        }
- for (i = 0; i < len; i++)
-               odp_packet_free(pkt_table[i]);
+       for (n = 0; n < i; ++n)
+               odp_packet_free(pkt_table[n]);
- return len;
+       return i;
  }

_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to