diff --git a/userspace/tools/radiusvlan.c b/userspace/tools/radiusvlan.c
index 603a2076866ae54c34818b945a9a52e883d8a9ae..25c869ad73768a700b5c350e82172ad82072454e 100644
--- a/userspace/tools/radiusvlan.c
+++ b/userspace/tools/radiusvlan.c
@@ -225,7 +225,7 @@ int rvlan_fsm(struct rvlan_dev *dev, fd_set *rdset)
 		req.mr_type = PACKET_MR_PROMISC;
 		if (setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP,
 			       &req, sizeof(req)) < 0) {
-			fprintf(stderr, "%s: can't make %s promoscuous: %s\n",
+			fprintf(stderr, "%s: can't make %s promiscuous: %s\n",
 				prgname, dev->name, strerror(errno));
 			close(sock);
 			return -1;
@@ -253,6 +253,10 @@ int rvlan_fsm(struct rvlan_dev *dev, fd_set *rdset)
 		}
 		memcpy(dev->mac, &ifr.ifr_ifru.ifru_hwaddr.sa_data, ETH_ALEN);
 
+		/* Flush all already received frames */
+		while (recvfrom(sock, frame, sizeof(frame), MSG_TRUNC | MSG_DONTWAIT, (struct sockaddr *)&from, &fromlen) > 0) {
+		}
+
 		dev->poll_fd = sock;
 		dev->fsm_state = RVLAN_SNIFF;
 		break;