| 484 | } |
| 485 | |
| 486 | static void udp_client_entry(void *parameter) |
| 487 | { |
| 488 | #define LWIP_UDP_TEST_BUF_SIZE 16 |
| 489 | |
| 490 | rt_bool_t fail_flag = RT_TRUE; |
| 491 | int ret, sock = -1, port; |
| 492 | struct sockaddr_in server_addr; |
| 493 | char send_buf[] = "hello"; |
| 494 | char recv_buf[LWIP_UDP_TEST_BUF_SIZE]; |
| 495 | socklen_t addr_len = sizeof(struct sockaddr_in); |
| 496 | |
| 497 | port = RT_UTEST_LWIP_UDP_PORT; |
| 498 | |
| 499 | /* create socket */ |
| 500 | if ((sock = lwip_socket(AF_INET, SOCK_DGRAM, 0)) == -1) |
| 501 | { |
| 502 | uassert_true(RT_FALSE); |
| 503 | goto __exit; |
| 504 | } |
| 505 | else |
| 506 | { |
| 507 | uassert_true(RT_TRUE); |
| 508 | } |
| 509 | |
| 510 | /* bind to any port */ |
| 511 | struct sockaddr_in client_bind_addr; |
| 512 | client_bind_addr.sin_family = AF_INET; |
| 513 | client_bind_addr.sin_port = 0; /* let system assign port */ |
| 514 | client_bind_addr.sin_addr.s_addr = htonl(IPADDR_ANY); |
| 515 | rt_memset(&(client_bind_addr.sin_zero), 0, sizeof(client_bind_addr.sin_zero)); |
| 516 | if (lwip_bind(sock, (struct sockaddr *)&client_bind_addr, sizeof(struct sockaddr)) == -1) |
| 517 | { |
| 518 | rt_kprintf("UDP client bind failed\n"); |
| 519 | uassert_true(RT_FALSE); |
| 520 | goto __exit; |
| 521 | } |
| 522 | rt_kprintf("UDP client bound\n"); |
| 523 | |
| 524 | server_addr.sin_family = AF_INET; |
| 525 | server_addr.sin_port = htons(port); |
| 526 | /* server addr:127.0.0.1 */ |
| 527 | server_addr.sin_addr.s_addr = htonl(IPADDR_LOOPBACK); |
| 528 | rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero)); |
| 529 | |
| 530 | /* wait for the server to enter the receive state */ |
| 531 | rt_thread_mdelay(10); |
| 532 | |
| 533 | /* send data to server */ |
| 534 | ret = lwip_sendto(sock, send_buf, rt_strlen(send_buf), 0, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); |
| 535 | if (ret <= 0) |
| 536 | { |
| 537 | rt_kprintf("UDP client sendto failed: sent %d\n", ret); |
| 538 | uassert_true(RT_FALSE); |
| 539 | goto __exit; |
| 540 | } |
| 541 | rt_kprintf("UDP client sent %d bytes: %s\n", ret, send_buf); |
| 542 | |
| 543 | /* receive echo from server with timeout */ |
nothing calls this directly
no test coverage detected