mirror of
				https://github.com/open5gs/open5gs.git
				synced 2025-10-31 12:03:46 +00:00 
			
		
		
		
	tcp/udp interface is changed
This commit is contained in:
		| @@ -149,20 +149,15 @@ CORE_DECLARE(status_t) core_inet_pton(int family, const char *src, void *sa); | ||||
|  * UDP Socket | ||||
|  */ | ||||
| CORE_DECLARE(status_t) udp_socket(sock_id *new, int family); | ||||
| CORE_DECLARE(status_t) udp_server(sock_id *new, | ||||
|         int family, const char *hostname, c_uint16_t port); | ||||
| CORE_DECLARE(status_t) udp_client(sock_id *new, | ||||
|         int family, const char *hostname, c_uint16_t port); | ||||
| CORE_DECLARE(status_t) udp_connect(sock_id id, | ||||
|         const char *hostname, c_uint16_t port); | ||||
| CORE_DECLARE(status_t) udp_server(sock_id *new, c_sockaddr_t *addr); | ||||
| CORE_DECLARE(status_t) udp_client(sock_id *new, c_sockaddr_t *addr); | ||||
| CORE_DECLARE(status_t) udp_connect(sock_id id, c_sockaddr_t *addr); | ||||
|  | ||||
| /* | ||||
|  * TCP Socket | ||||
|  */ | ||||
| CORE_DECLARE(status_t) tcp_server(sock_id *new, | ||||
|         int family, const char *hostname, c_uint16_t port); | ||||
| CORE_DECLARE(status_t) tcp_client(sock_id *new, | ||||
|         int family, const char *hostname, c_uint16_t port); | ||||
| CORE_DECLARE(status_t) tcp_server(sock_id *new, c_sockaddr_t *addr); | ||||
| CORE_DECLARE(status_t) tcp_client(sock_id *new, c_sockaddr_t *addr); | ||||
|  | ||||
| /* | ||||
|  * SCTP Socket | ||||
|   | ||||
| @@ -3,96 +3,86 @@ | ||||
| #include "core_debug.h" | ||||
| #include "core_arch_network.h" | ||||
|  | ||||
| status_t tcp_server(sock_id *new, | ||||
|         int family, const char *hostname, c_uint16_t port) | ||||
| status_t tcp_server(sock_id *new, c_sockaddr_t *addr) | ||||
| { | ||||
|     status_t rv; | ||||
|     c_sockaddr_t *sa; | ||||
|     sock_t *sock = NULL; | ||||
|     c_sockaddr_t *iter; | ||||
|     char buf[CORE_ADDRSTRLEN]; | ||||
|  | ||||
|     rv = core_getaddrinfo(&sa, family, hostname, port, AI_PASSIVE); | ||||
|     d_assert(rv == CORE_OK && sa, return CORE_ERROR,); | ||||
|     d_assert(new, return CORE_ERROR,); | ||||
|     d_assert(addr, return CORE_ERROR,); | ||||
|  | ||||
|     while(sa) | ||||
|     iter = addr; | ||||
|     while(iter) | ||||
|     { | ||||
|         rv = sock_socket(new, sa->c_sa_family, SOCK_STREAM, IPPROTO_TCP); | ||||
|         rv = sock_socket(new, iter->c_sa_family, SOCK_STREAM, IPPROTO_TCP); | ||||
|         if (rv != CORE_OK) continue; | ||||
|          | ||||
|         sock = (sock_t *)*new; | ||||
|  | ||||
|         d_assert(sock_setsockopt(*new, SOCK_O_REUSEADDR, 1) == CORE_OK, | ||||
|                 return CORE_ERROR, | ||||
|                 "setsockopt(%s:%d) failed(%d:%s)", | ||||
|                 CORE_ADDR(sa, buf), port, errno, strerror(errno)); | ||||
|                 "setsockopt [%s]:%d failed(%d:%s)", | ||||
|                 CORE_ADDR(iter, buf), CORE_PORT(iter), errno, strerror(errno)); | ||||
|  | ||||
|         if (sock_bind(*new, sa) == CORE_OK) | ||||
|         if (sock_bind(*new, iter) == CORE_OK) | ||||
|         { | ||||
|             d_trace(1, "tcp bind %s:%d\n", CORE_ADDR(sa, buf), port); | ||||
|             d_trace(1, "tcp_server() [%s]:%d\n", | ||||
|                     CORE_ADDR(iter, buf), CORE_PORT(iter)); | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         rv = sock_delete(*new); | ||||
|         d_assert(rv == CORE_OK, return CORE_ERROR,); | ||||
|  | ||||
|         sa = sa->next; | ||||
|         iter = iter->next; | ||||
|     } | ||||
|  | ||||
|     if (sa == NULL) | ||||
|     if (iter == NULL) | ||||
|     { | ||||
|         d_error("tcp bind(%d:%s:%d) failed(%d:%s)", | ||||
|                 sock->family, hostname, port, errno, strerror(errno)); | ||||
|         d_error("tcp_server() [%s]:%d failed(%d:%s)", | ||||
|                 CORE_ADDR(addr, buf), CORE_PORT(addr), errno, strerror(errno)); | ||||
|         return CORE_ERROR; | ||||
|     } | ||||
|  | ||||
|     rv = core_freeaddrinfo(sa); | ||||
|     d_assert(rv == CORE_OK, return CORE_ERROR,); | ||||
|  | ||||
|     rv = sock_listen(*new); | ||||
|     d_assert(rv == CORE_OK, return CORE_ERROR,); | ||||
|  | ||||
|     return CORE_OK; | ||||
| } | ||||
|  | ||||
| status_t tcp_client(sock_id *new, | ||||
|         int family, const char *hostname, c_uint16_t port) | ||||
| status_t tcp_client(sock_id *new, c_sockaddr_t *addr) | ||||
| { | ||||
|     status_t rv; | ||||
|     c_sockaddr_t *sa; | ||||
|     sock_t *sock = NULL; | ||||
|     c_sockaddr_t *iter; | ||||
|     char buf[CORE_ADDRSTRLEN]; | ||||
|  | ||||
|     rv = core_getaddrinfo(&sa, family, hostname, port, 0); | ||||
|     d_assert(rv == CORE_OK && sa, return CORE_ERROR,); | ||||
|     d_assert(new, return CORE_ERROR,); | ||||
|     d_assert(addr, return CORE_ERROR,); | ||||
|  | ||||
|     while(sa) | ||||
|     iter = addr; | ||||
|     while(iter) | ||||
|     { | ||||
|         rv = sock_socket(new, sa->c_sa_family, SOCK_STREAM, IPPROTO_TCP); | ||||
|         rv = sock_socket(new, iter->c_sa_family, SOCK_STREAM, IPPROTO_TCP); | ||||
|         if (rv != CORE_OK) continue; | ||||
|          | ||||
|         sock = (sock_t *)*new; | ||||
|  | ||||
|         if (sock_connect(*new, sa) == CORE_OK) | ||||
|         if (sock_connect(*new, iter) == CORE_OK) | ||||
|         { | ||||
|             d_trace(1, "tcp connect %s:%d\n", CORE_ADDR(sa, buf), port); | ||||
|             d_trace(1, "tcp_client() [%s]:%d\n", | ||||
|                     CORE_ADDR(iter, buf), CORE_PORT(iter)); | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         rv = sock_delete(*new); | ||||
|         d_assert(rv == CORE_OK, return CORE_ERROR,); | ||||
|  | ||||
|         sa = sa->next; | ||||
|         iter = iter->next; | ||||
|     } | ||||
|  | ||||
|     if (sa == NULL) | ||||
|     if (iter == NULL) | ||||
|     { | ||||
|         d_error("tcp connect(%d:%s:%d) failed(%d:%s)", | ||||
|                 sock->family, hostname, port, errno, strerror(errno)); | ||||
|         d_error("tcp_client() [%s]:%d failed(%d:%s)", | ||||
|                 CORE_ADDR(addr, buf), CORE_PORT(addr), errno, strerror(errno)); | ||||
|         return CORE_ERROR; | ||||
|     } | ||||
|  | ||||
|     rv = core_freeaddrinfo(sa); | ||||
|     d_assert(rv == CORE_OK, return CORE_ERROR,); | ||||
|  | ||||
|     return CORE_OK; | ||||
| } | ||||
|   | ||||
| @@ -15,126 +15,114 @@ status_t udp_socket(sock_id *new, int family) | ||||
|     return CORE_OK; | ||||
| } | ||||
|  | ||||
| status_t udp_server(sock_id *new, | ||||
|         int family, const char *hostname, c_uint16_t port) | ||||
| status_t udp_server(sock_id *new, c_sockaddr_t *addr) | ||||
| { | ||||
|     status_t rv; | ||||
|     c_sockaddr_t *sa; | ||||
|     c_sockaddr_t *iter; | ||||
|     char buf[CORE_ADDRSTRLEN]; | ||||
|  | ||||
|     rv = core_getaddrinfo(&sa, family, hostname, port, AI_PASSIVE); | ||||
|     d_assert(rv == CORE_OK && sa, return CORE_ERROR,); | ||||
|     d_assert(new, return CORE_ERROR,); | ||||
|     d_assert(addr, return CORE_ERROR,); | ||||
|  | ||||
|     while(sa) | ||||
|     iter = addr; | ||||
|     while(iter) | ||||
|     { | ||||
|         rv = udp_socket(new, sa->c_sa_family); | ||||
|         rv = udp_socket(new, iter->c_sa_family); | ||||
|         if (rv != CORE_OK) continue; | ||||
|          | ||||
|         d_assert(sock_setsockopt(*new, SOCK_O_REUSEADDR, 1) == CORE_OK, | ||||
|                 return CORE_ERROR, | ||||
|                 "setsockopt(%s:%d) failed(%d:%s)", | ||||
|                 CORE_ADDR(sa, buf), port, errno, strerror(errno)); | ||||
|                 "setsockopt [%s]:%d failed(%d:%s)", | ||||
|                 CORE_ADDR(iter, buf), CORE_PORT(iter), errno, strerror(errno)); | ||||
|  | ||||
|         if (sock_bind(*new, sa) == CORE_OK) | ||||
|         if (sock_bind(*new, iter) == CORE_OK) | ||||
|         { | ||||
|             d_trace(1, "udp bind %s:%d\n", CORE_ADDR(sa, buf), port); | ||||
|             d_trace(1, "udp_server() [%s]:%d\n", | ||||
|                     CORE_ADDR(iter, buf), CORE_PORT(iter)); | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         rv = sock_delete(*new); | ||||
|         d_assert(rv == CORE_OK, return CORE_ERROR,); | ||||
|  | ||||
|         sa = sa->next; | ||||
|         iter = iter->next; | ||||
|     } | ||||
|  | ||||
|     if (sa == NULL) | ||||
|     if (iter == NULL) | ||||
|     { | ||||
|         d_error("udp bind(%d:%s:%d) failed(%d:%s)", | ||||
|                 family, hostname, port, errno, strerror(errno)); | ||||
|         d_error("udpserver() [%s]:%d failed(%d:%s)", | ||||
|                 CORE_ADDR(addr, buf), CORE_PORT(addr), errno, strerror(errno)); | ||||
|         return CORE_ERROR; | ||||
|     } | ||||
|  | ||||
|     rv = core_freeaddrinfo(sa); | ||||
|     d_assert(rv == CORE_OK, return CORE_ERROR,); | ||||
|  | ||||
|     return CORE_OK; | ||||
| } | ||||
|  | ||||
| status_t udp_client(sock_id *new, | ||||
|         int family, const char *hostname, c_uint16_t port) | ||||
| status_t udp_client(sock_id *new, c_sockaddr_t *addr) | ||||
| { | ||||
|     status_t rv; | ||||
|     c_sockaddr_t *sa; | ||||
|     sock_t *sock = NULL; | ||||
|     c_sockaddr_t *iter; | ||||
|     char buf[CORE_ADDRSTRLEN]; | ||||
|  | ||||
|     rv = core_getaddrinfo(&sa, family, hostname, port, 0); | ||||
|     d_assert(rv == CORE_OK && sa, return CORE_ERROR,); | ||||
|     d_assert(new, return CORE_ERROR,); | ||||
|     d_assert(addr, return CORE_ERROR,); | ||||
|  | ||||
|     while(sa) | ||||
|     iter = addr; | ||||
|     while(iter) | ||||
|     { | ||||
|         rv = udp_socket(new, sa->c_sa_family); | ||||
|         rv = udp_socket(new, iter->c_sa_family); | ||||
|         if (rv != CORE_OK) continue; | ||||
|          | ||||
|         sock = (sock_t *)*new; | ||||
|  | ||||
|         if (sock_connect(*new, sa) == CORE_OK) | ||||
|         if (sock_connect(*new, iter) == CORE_OK) | ||||
|         { | ||||
|             d_trace(1, "udp connect %s:%d\n", CORE_ADDR(sa, buf), port); | ||||
|             d_trace(1, "udp_client() [%s]:%d\n", | ||||
|                     CORE_ADDR(iter, buf), CORE_PORT(iter)); | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         rv = sock_delete(*new); | ||||
|         d_assert(rv == CORE_OK, return CORE_ERROR,); | ||||
|  | ||||
|         sa = sa->next; | ||||
|         iter = iter->next; | ||||
|     } | ||||
|  | ||||
|     if (sa == NULL) | ||||
|     if (iter == NULL) | ||||
|     { | ||||
|         d_error("udp connect(%d:%s:%d) failed(%d:%s)", | ||||
|                 sock->family, hostname, port, errno, strerror(errno)); | ||||
|         d_error("udp_client() [%s]:%d failed(%d:%s)", | ||||
|                 CORE_ADDR(addr, buf), CORE_PORT(addr), errno, strerror(errno)); | ||||
|         return CORE_ERROR; | ||||
|     } | ||||
|  | ||||
|     rv = core_freeaddrinfo(sa); | ||||
|     d_assert(rv == CORE_OK, return CORE_ERROR,); | ||||
|  | ||||
|     return CORE_OK; | ||||
| } | ||||
|  | ||||
| status_t udp_connect(sock_id id, const char *hostname, c_uint16_t port) | ||||
| status_t udp_connect(sock_id id, c_sockaddr_t *addr) | ||||
| { | ||||
|     status_t rv; | ||||
|     c_sockaddr_t *sa; | ||||
|     sock_t *sock = (sock_t *)id; | ||||
|     c_sockaddr_t *iter; | ||||
|     char buf[CORE_ADDRSTRLEN]; | ||||
|  | ||||
|     d_assert(id, return CORE_ERROR,); | ||||
|     d_assert(addr, return CORE_ERROR,); | ||||
|  | ||||
|     rv = core_getaddrinfo(&sa, sock->family, hostname, port, 0); | ||||
|     d_assert(rv == CORE_OK && sa, return CORE_ERROR,); | ||||
|  | ||||
|     while(sa) | ||||
|     iter = addr; | ||||
|     while(iter) | ||||
|     { | ||||
|         if (sock_connect(id, sa) == CORE_OK) | ||||
|         if (sock_connect(id, iter) == CORE_OK) | ||||
|         { | ||||
|             d_trace(1, "udp connect %s:%d\n", CORE_ADDR(sa, buf), port); | ||||
|             d_trace(1, "udp_connect() [%s]:%d\n", | ||||
|                     CORE_ADDR(iter, buf), CORE_PORT(iter)); | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         sa = sa->next; | ||||
|         iter = iter->next; | ||||
|     } | ||||
|  | ||||
|     if (sa == NULL) | ||||
|     if (iter == NULL) | ||||
|     { | ||||
|         d_error("udp connect(%d:%s:%d) failed(%d:%s)", | ||||
|                 sock->family, hostname, port, errno, strerror(errno)); | ||||
|         d_error("udp_connect() [%s]:%d failed(%d:%s)", | ||||
|                 CORE_ADDR(addr, buf), CORE_PORT(addr), errno, strerror(errno)); | ||||
|         return CORE_ERROR; | ||||
|     } | ||||
|  | ||||
|     rv = core_freeaddrinfo(sa); | ||||
|     d_assert(rv == CORE_OK, return CORE_ERROR,); | ||||
|  | ||||
|     return CORE_OK; | ||||
| } | ||||
|   | ||||
| @@ -13,21 +13,34 @@ | ||||
| static void sock_test1(abts_case *tc, void *data) | ||||
| { | ||||
|     sock_id udp; | ||||
|     c_sockaddr_t *addr; | ||||
|     status_t rv; | ||||
|  | ||||
|     rv = udp_server(&udp, AF_UNSPEC, NULL, PORT); | ||||
|     rv = core_getaddrinfo(&addr, AF_UNSPEC, NULL, PORT, AI_PASSIVE); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = udp_server(&udp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|      | ||||
|     rv = sock_delete(udp); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     rv = udp_server(&udp, AF_UNSPEC, "127.0.0.1", PORT); | ||||
|     rv = core_getaddrinfo(&addr, AF_UNSPEC, "127.0.0.1", PORT, AI_PASSIVE); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = udp_server(&udp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|      | ||||
|     rv = sock_delete(udp); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     rv = udp_server(&udp, AF_UNSPEC, "::1", PORT); | ||||
|     rv = core_getaddrinfo(&addr, AF_UNSPEC, "::1", PORT, AI_PASSIVE); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = udp_server(&udp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|      | ||||
|     rv = sock_delete(udp); | ||||
| @@ -40,10 +53,15 @@ static void *THREAD_FUNC test2_main(thread_id id, void *data) | ||||
|     abts_case *tc = data; | ||||
|     status_t rv; | ||||
|     sock_id tcp; | ||||
|     c_sockaddr_t *addr; | ||||
|     char str[STRLEN]; | ||||
|     ssize_t size; | ||||
|  | ||||
|     rv = tcp_client(&tcp, AF_UNSPEC, "::1", PORT); | ||||
|     rv = core_getaddrinfo(&addr, AF_UNSPEC, "::1", PORT, AI_PASSIVE); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = tcp_client(&tcp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     size = core_recv(tcp, str, STRLEN, 0); | ||||
| @@ -60,9 +78,14 @@ static void sock_test2(abts_case *tc, void *data) | ||||
| { | ||||
|     status_t rv; | ||||
|     sock_id tcp, tcp2; | ||||
|     c_sockaddr_t *addr; | ||||
|     ssize_t size; | ||||
|  | ||||
|     rv = tcp_server(&tcp, AF_INET6, NULL, PORT); | ||||
|     rv = core_getaddrinfo(&addr, AF_INET6, NULL, PORT, AI_PASSIVE); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = tcp_server(&tcp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     rv = thread_create(&test2_thread, NULL, test2_main, tc); | ||||
| @@ -120,12 +143,16 @@ static void sock_test3(abts_case *tc, void *data) | ||||
|     sock_id udp; | ||||
|     status_t rv; | ||||
|     ssize_t size; | ||||
|     c_sockaddr_t sa; | ||||
|     c_sockaddr_t sa, *addr; | ||||
|     socklen_t addrlen; | ||||
|     char str[STRLEN]; | ||||
|     char buf[CORE_ADDRSTRLEN]; | ||||
|  | ||||
|     rv = udp_server(&udp, AF_INET, NULL, PORT); | ||||
|     rv = core_getaddrinfo(&addr, AF_INET, NULL, PORT, AI_PASSIVE); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = udp_server(&udp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     rv = thread_create(&test3_thread, NULL, test3_main, tc); | ||||
| @@ -148,10 +175,15 @@ static void *THREAD_FUNC test4_main(thread_id id, void *data) | ||||
|     abts_case *tc = data; | ||||
|     status_t rv; | ||||
|     sock_id udp; | ||||
|     c_sockaddr_t *addr; | ||||
|     char str[STRLEN]; | ||||
|     ssize_t size; | ||||
|  | ||||
|     rv = udp_client(&udp, AF_INET, NULL, PORT); | ||||
|     rv = core_getaddrinfo(&addr, AF_INET, NULL, PORT, 0); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = udp_client(&udp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     size = core_send(udp, DATASTR, strlen(DATASTR), 0); | ||||
| @@ -172,12 +204,16 @@ static void sock_test4(abts_case *tc, void *data) | ||||
|     sock_id udp; | ||||
|     status_t rv; | ||||
|     ssize_t size; | ||||
|     c_sockaddr_t sa; | ||||
|     c_sockaddr_t sa, *addr; | ||||
|     socklen_t addrlen; | ||||
|     char str[STRLEN]; | ||||
|     char buf[CORE_ADDRSTRLEN]; | ||||
|  | ||||
|     rv = udp_server(&udp, AF_INET, NULL, PORT); | ||||
|     rv = core_getaddrinfo(&addr, AF_INET, NULL, PORT, AI_PASSIVE); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = udp_server(&udp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     rv = thread_create(&test4_thread, NULL, test4_main, tc); | ||||
| @@ -203,13 +239,22 @@ static void *THREAD_FUNC test5_main(thread_id id, void *data) | ||||
|     abts_case *tc = data; | ||||
|     status_t rv; | ||||
|     sock_id udp; | ||||
|     c_sockaddr_t *addr; | ||||
|     char str[STRLEN]; | ||||
|     ssize_t size; | ||||
|  | ||||
|     rv = udp_server(&udp, AF_INET6, NULL, PORT2); | ||||
|     rv = core_getaddrinfo(&addr, AF_INET6, NULL, PORT2, AI_PASSIVE); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = udp_server(&udp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     rv = udp_connect(udp, NULL, PORT); | ||||
|     rv = core_getaddrinfo(&addr, AF_INET6, NULL, PORT, 0); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = udp_connect(udp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     size = core_send(udp, DATASTR, strlen(DATASTR), 0); | ||||
| @@ -230,15 +275,23 @@ static void sock_test5(abts_case *tc, void *data) | ||||
|     sock_id udp; | ||||
|     status_t rv; | ||||
|     ssize_t size; | ||||
|     c_sockaddr_t sa; | ||||
|     c_sockaddr_t sa, *addr; | ||||
|     socklen_t addrlen; | ||||
|     char str[STRLEN]; | ||||
|     char buf[CORE_ADDRSTRLEN]; | ||||
|  | ||||
|     rv = udp_server(&udp, AF_INET6, NULL, PORT); | ||||
|     rv = core_getaddrinfo(&addr, AF_INET6, NULL, PORT, AI_PASSIVE); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = udp_server(&udp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     rv = udp_connect(udp, NULL, PORT2); | ||||
|     rv = core_getaddrinfo(&addr, AF_INET6, NULL, PORT2, 0); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = udp_connect(udp, addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|     rv = core_freeaddrinfo(addr); | ||||
|     ABTS_INT_EQUAL(tc, CORE_OK, rv); | ||||
|  | ||||
|     rv = thread_create(&test5_thread, NULL, test5_main, tc); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user