%% options copyright owner = Dirk Krause copyright year = 2015-xxxx license = bsd %% module #include "dk4sock.h" #include "dk4socka.h" #include "dk4error.h" #include "dk4mem.h" $!trace-include dk4_socket_set_t * dk4socket_set_service_app( const dkChar *servicename, int backlog, int local, dk4_app_t *app ) { dkChar habuf[128]; dk4_sockaddr_storage_t sname; dk4_er_t er; const dkChar *msgt[8]; const dkChar * const *ltx = NULL; dk4_socket_set_t *back = NULL; struct sockaddr *so = NULL; #if VERSION_BEFORE_20150821 struct sockaddr_in *in4 = NULL; #endif #if DK4_HAVE_STRUCT_SOCKADDR_IN6 #if VERSION_BEFORE_20150821 struct sockaddr_in6 *in6 = NULL; #endif #endif size_t i = 0; /* Traverse socket set */ #if DK4_HAVE_SOCKLEN_T socklen_t slgt = 0; #else int slgt = 0; #endif int res = 0; /* Operation result */ int hat = 0; /* Have address text */ if ((NULL != servicename) && (0 < backlog)) { dk4error_init(&er); back = dk4socket_set_service(servicename, backlog, local, &er); if (NULL != back) { if (0 != dk4app_log_do(app, DK4_LL_PROGRESS)) { ltx = dk4socket_log_texts(app); if (NULL != ltx) { for (i = 0; i < back->szUsed; i++) { hat = 0; #if DK4_HAVE_SOCKLEN_T slgt = (socklen_t)sizeof(sname); #else slgt = (int)sizeof(sname); #endif so = (struct sockaddr *)(&sname); res = getsockname((back->pSockets)[i], so, &slgt); if (0 == res) { switch (so->sa_family) { case AF_INET : { if (sizeof(struct sockaddr_in) == slgt) { #if VERSION_BEFORE_20150821 in4 = (struct sockaddr_in *)so; #endif res = dk4socket_addr_port_to_text( habuf, DK4_SIZEOF(habuf,dkChar), AF_INET, so, sizeof(struct sockaddr_in), NULL ); if (DK4_SOCKET_RESULT_SUCCESS == res) { hat = 1; } } } break; #if DK4_HAVE_STRUCT_SOCKADDR_IN6 case AF_INET6 : { if (sizeof(struct sockaddr_in6) == slgt) { #if VERSION_BEFORE_20150821 in6 = (struct sockaddr_in6 *)so; #endif res = dk4socket_addr_port_to_text( habuf, DK4_SIZEOF(habuf,dkChar), AF_INET6, so, sizeof(struct sockaddr_in6), NULL ); if (DK4_SOCKET_RESULT_SUCCESS == res) { hat = 1; } } } break; #endif } if (0 != hat) { msgt[0] = ltx[140]; msgt[1] = habuf; msgt[2] = NULL; dk4app_log_msg(app, DK4_LL_PROGRESS, msgt, 2); } } } } } } else { dk4socket_log_simple_1(app, DK4_LL_ERROR, 139, &er); } } return back; }