Make privilege, port and fd handling reliable in tests
This commit is contained in:
1 parent
5a9e61164b
commit
3f9edc88c4
6 files changed
+71
-7
No files matched your search
@@ -335,11 +335,27 @@ struct stcp_server *stcp_server_create(struct UASYNC *ua, uint16_t port,
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "listen failed err=%d", socket_get_error());
|
||||
socket_close_wrapper(srv->listen_sock); u_free(srv); return NULL;
|
||||
}
|
||||
uint16_t bound_port = stcp_server_get_port(srv);
|
||||
if (!bound_port) { socket_close_wrapper(srv->listen_sock); u_free(srv); return NULL; }
|
||||
srv->listen_id = uasync_add_socket_t(ua, srv->listen_sock, server_accept_cb, NULL, NULL, "stcp_listen", srv);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "stcp_server: listening on port %u family=%s", port, use_family == AF_INET ? "v4" : "v6");
|
||||
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "stcp_server: listening on port %u family=%s", bound_port, use_family == AF_INET ? "v4" : "v6");
|
||||
return srv;
|
||||
}
|
||||
|
||||
uint16_t stcp_server_get_port(const struct stcp_server *srv) {
|
||||
if (!srv) { DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "stcp_server_get_port: invalid server"); return 0; }
|
||||
struct sockaddr_storage address;
|
||||
socklen_t size = sizeof(address);
|
||||
if (getsockname(srv->listen_sock, (struct sockaddr *)&address, &size) != 0) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "stcp_server_get_port: getsockname failed err=%d", socket_get_error());
|
||||
return 0;
|
||||
}
|
||||
if (address.ss_family == AF_INET) return ntohs(((struct sockaddr_in *)&address)->sin_port);
|
||||
if (address.ss_family == AF_INET6) return ntohs(((struct sockaddr_in6 *)&address)->sin6_port);
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "stcp_server_get_port: unexpected family=%d", address.ss_family);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void stcp_server_destroy(struct stcp_server *srv) {
|
||||
if (!srv) return;
|
||||
if (srv->listen_id) uasync_remove_socket_t(srv->ua, srv->listen_sock);
|
||||
|
||||
@@ -24,6 +24,8 @@ struct stcp_server *stcp_server_create(struct UASYNC *ua, uint16_t port,
|
||||
stcp_connect_cb connect_cb, void *arg,
|
||||
stcp_close_cb close_cb, void *close_arg,
|
||||
int family);
|
||||
// Фактический TCP-порт слушателя (port=0 при create выбирает ОС); 0 при ошибке.
|
||||
uint16_t stcp_server_get_port(const struct stcp_server *srv);
|
||||
void stcp_server_destroy(struct stcp_server *srv);
|
||||
|
||||
// Включить REALITY-камуфляж на этом TCP-сервере: перед STCP-хендшейком сервер
|
||||
|
||||
Reference in new issue
Block a user