headless: expose OS-assigned control and audio listener ports
This commit is contained in:
1 parent
91909fbb1e
commit
dc0dbbf720
12 files changed
+91
-53
No files matched your search
@@ -246,3 +246,16 @@ uint16_t ss_get_port(const struct sockaddr_storage *addr) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint16_t socket_get_bound_port(socket_t sock) {
|
||||
struct sockaddr_storage address; socklen_t size = sizeof(address);
|
||||
if (getsockname(sock, (struct sockaddr*)&address, &size) != 0) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_SOCKET, "getsockname fd=%llu failed: %s",
|
||||
(unsigned long long)sock, socket_strerror(socket_get_error()));
|
||||
return 0;
|
||||
}
|
||||
uint16_t port = ss_get_port(&address);
|
||||
if (!port) DEBUG_ERROR(DEBUG_CATEGORY_SOCKET, "socket fd=%llu family=%d has no bound port",
|
||||
(unsigned long long)sock, address.ss_family);
|
||||
return port;
|
||||
}
|
||||
@@ -78,6 +78,8 @@ const char* socket_strerror(int err);
|
||||
|
||||
// взять порт из sockaddr_storage
|
||||
uint16_t ss_get_port(const struct sockaddr_storage *addr);
|
||||
// Фактический IPv4/IPv6-порт уже привязанного сокета; 0 при ошибке.
|
||||
uint16_t socket_get_bound_port(socket_t sock);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
Reference in new issue
Block a user