@@ -54,67 +54,79 @@ int main() {
54
54
if (err) {
55
55
printf (" MBED: failed to connect with an error of %d\r\n " , err);
56
56
GREENTEA_TESTSUITE_RESULT (false );
57
- } else {
58
- printf ( " UDP client IP Address is %s \n " , eth. get_ip_address ());
57
+ return 0 ;
58
+ }
59
59
60
- greentea_send_kv ( " target_ip " , eth.get_ip_address ());
60
+ printf ( " UDP client IP Address is %s \n " , eth.get_ip_address ());
61
61
62
- char recv_key[] = " host_port" ;
63
- char ipbuf[60 ] = {0 };
64
- char portbuf[16 ] = {0 };
65
- unsigned int port = 0 ;
62
+ greentea_send_kv (" target_ip" , eth.get_ip_address ());
66
63
67
- UDPSocket sock;
68
- sock.open (ð);
69
- sock.set_timeout (MBED_CFG_UDP_CLIENT_ECHO_TIMEOUT);
64
+ char recv_key[] = " host_port" ;
65
+ char ipbuf[60 ] = {0 };
66
+ char portbuf[16 ] = {0 };
67
+ unsigned int port = 0 ;
70
68
71
- greentea_send_kv (" host_ip" , " " );
72
- greentea_parse_kv (recv_key, ipbuf, sizeof (recv_key), sizeof (ipbuf));
73
-
74
- greentea_send_kv (" host_port" , " " );
75
- greentea_parse_kv (recv_key, portbuf, sizeof (recv_key), sizeof (ipbuf));
76
- sscanf (portbuf, " %u" , &port);
77
-
78
- printf (" MBED: UDP Server IP address received: %s:%d \n " , ipbuf, port);
79
- SocketAddress udp_addr (ipbuf, port);
80
-
81
- int success = 0 ;
82
- int i = 0 ;
83
- while (success < ECHO_LOOPS) {
84
- prep_buffer (uuid, uuid_len, tx_buffer, sizeof (tx_buffer));
85
- const int ret = sock.sendto (udp_addr, tx_buffer, sizeof (tx_buffer));
86
- if (ret >= 0 ) {
87
- printf (" [%02d] sent %d Bytes - %.*s \n " , i, ret, ret, tx_buffer);
88
- } else {
89
- printf (" [%02d] Network error %d\n " , i, ret);
90
- i++;
91
- continue ;
92
- }
69
+ UDPSocket sock;
70
+ sock.open (ð);
71
+ sock.set_timeout (MBED_CFG_UDP_CLIENT_ECHO_TIMEOUT);
93
72
94
- SocketAddress temp_addr;
95
- const int n = sock.recvfrom (&temp_addr, rx_buffer, sizeof (rx_buffer));
96
- if (n >= 0 ) {
97
- printf (" [%02d] receive %d Bytes - %.*s \n " , i, n, n, tx_buffer);
98
- } else {
99
- printf (" [%02d] Network error %d\n " , i, n);
100
- i++;
101
- continue ;
102
- }
73
+ greentea_send_kv (" host_ip" , " " );
74
+ greentea_parse_kv (recv_key, ipbuf, sizeof (recv_key), sizeof (ipbuf));
103
75
104
- if ((temp_addr == udp_addr &&
105
- n == sizeof (tx_buffer) &&
106
- memcmp (rx_buffer, tx_buffer, sizeof (rx_buffer)) == 0 )) {
107
- success += 1 ;
76
+ greentea_send_kv (" host_port" , " " );
77
+ greentea_parse_kv (recv_key, portbuf, sizeof (recv_key), sizeof (ipbuf));
78
+ sscanf (portbuf, " %u" , &port);
108
79
109
- printf (" [%02d] success #%d\n " , i, success);
110
- }
80
+ printf (" MBED: UDP Server IP address received: %s:%d \n " , ipbuf, port);
81
+ SocketAddress udp_addr (ipbuf, port);
82
+
83
+ int success = 0 ;
84
+ int i = 0 ;
85
+ while (success < ECHO_LOOPS) {
86
+ prep_buffer (uuid, uuid_len, tx_buffer, sizeof (tx_buffer));
87
+ const int ret = sock.sendto (udp_addr, tx_buffer, sizeof (tx_buffer));
88
+ if (ret >= 0 ) {
89
+ printf (" [%02d] sent %d bytes - %.*s \n " , i, ret, ret, tx_buffer);
90
+ } else {
91
+ printf (" [%02d] Network error %d\n " , i, ret);
92
+ i++;
93
+ continue ;
94
+ }
95
+
96
+ SocketAddress temp_addr;
97
+ const int n = sock.recvfrom (&temp_addr, rx_buffer, sizeof (rx_buffer));
98
+ if (n >= 0 ) {
99
+ printf (" [%02d] recv %d bytes - %.*s \n " , i, n, n, tx_buffer);
100
+ } else {
101
+ printf (" [%02d] Network error %d\n " , i, n);
111
102
i++;
103
+ continue ;
112
104
}
113
105
114
- bool result = success == ECHO_LOOPS;
106
+ if ((temp_addr == udp_addr &&
107
+ n == sizeof (tx_buffer) &&
108
+ memcmp (rx_buffer, tx_buffer, sizeof (rx_buffer)) == 0 )) {
109
+ success += 1 ;
115
110
116
- sock.close ();
117
- eth.disconnect ();
118
- GREENTEA_TESTSUITE_RESULT (result);
111
+ printf (" [%02d] success #%d\n " , i, success);
112
+ i++;
113
+ continue ;
114
+ }
115
+
116
+ // failed, clean out any remaining bad packets
117
+ sock.set_timeout (0 );
118
+ while (true ) {
119
+ err = sock.recvfrom (NULL , NULL , 0 );
120
+ if (err == NSAPI_ERROR_WOULD_BLOCK) {
121
+ break ;
122
+ }
123
+ }
124
+ sock.set_timeout (MBED_CFG_UDP_CLIENT_ECHO_TIMEOUT);
119
125
}
126
+
127
+ bool result = success == ECHO_LOOPS;
128
+
129
+ sock.close ();
130
+ eth.disconnect ();
131
+ GREENTEA_TESTSUITE_RESULT (result);
120
132
}
0 commit comments