int rxlen = 0;
int flag = 0;
do {
- rxlen = recvfrom (morep->sock, morep->rx_buffer, ETHER_PREAMBLE + MAX_ETHER_SIZE, 0, NULL, 0);
- VERBOSE (morep, DEBUG, PRINTF ("rec. preamble: "); int i; for (i = 0; i < ETHER_PREAMBLE + MOREP_PREAMBLE; i++) printf ("%02x%c", morep->rx_buffer[i], (i == ETHER_PREAMBLE + MOREP_PREAMBLE - 1) ? '\n' : ':'));
-
- /* avoid alien packets */
- uint16_t rx_n_etype;
- memcpy ((void *)&rx_n_etype, morep->rx_buffer + 12, 2);
- if ((morep->n_etype != rx_n_etype) ||
- (memcmp (morep->tx_buffer, morep->rx_buffer + 6, 6) != 0) ||
- (memcmp (morep->tx_buffer + 6, morep->rx_buffer, 6) != 0)) {
- VERBOSE (morep, DEBUG, PRINTF ("alien packet\n"));
- continue;
- }
+ do {
+ rxlen = recvfrom (morep->sock, morep->rx_buffer, ETHER_PREAMBLE + MAX_ETHER_SIZE, 0, NULL, 0);
+ VERBOSE (morep, DEBUG, PRINTF ("rec. preamble: "); int i; for (i = 0; i < ETHER_PREAMBLE + MOREP_PREAMBLE; i++) printf ("%02x%c", morep->rx_buffer[i], (i == ETHER_PREAMBLE + MOREP_PREAMBLE - 1) ? '\n' : ':'));
+
+ /* avoid alien packets */
+ uint16_t rx_n_etype;
+ memcpy ((void *)&rx_n_etype, morep->rx_buffer + 12, 2);
+ if ((morep->n_etype != rx_n_etype) ||
+ (memcmp (morep->tx_buffer, morep->rx_buffer + 6, 6) != 0) ||
+ (memcmp (morep->tx_buffer + 6, morep->rx_buffer, 6) != 0)) {
+ VERBOSE (morep, DEBUG, PRINTF ("alien packet\n"));
+ } else {
+ break;
+ }
+ } while (1);
/* sequence number */
int pkgseqnum = morep->rx_buffer[ETHER_PREAMBLE + 1];