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