aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-usockets/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bun-usockets/src')
-rw-r--r--packages/bun-usockets/src/libusockets.h1
-rw-r--r--packages/bun-usockets/src/socket.c12
2 files changed, 12 insertions, 1 deletions
diff --git a/packages/bun-usockets/src/libusockets.h b/packages/bun-usockets/src/libusockets.h
index ea17a3622..cff9a1bd2 100644
--- a/packages/bun-usockets/src/libusockets.h
+++ b/packages/bun-usockets/src/libusockets.h
@@ -382,6 +382,7 @@ int us_socket_local_port(int ssl, struct us_socket_t *s);
/* Copy remote (IP) address of socket, or fail with zero length. */
void us_socket_remote_address(int ssl, struct us_socket_t *s, char *buf, int *length);
+void us_socket_local_address(int ssl, struct us_socket_t *s, char *buf, int *length);
/* Bun extras */
struct us_socket_t *us_socket_pair(struct us_socket_context_t *ctx, int socket_ext_size, LIBUS_SOCKET_DESCRIPTOR* fds);
diff --git a/packages/bun-usockets/src/socket.c b/packages/bun-usockets/src/socket.c
index 6edefe0f5..d8371c2ff 100644
--- a/packages/bun-usockets/src/socket.c
+++ b/packages/bun-usockets/src/socket.c
@@ -48,6 +48,16 @@ void us_socket_remote_address(int ssl, struct us_socket_t *s, char *buf, int *le
}
}
+void us_socket_local_address(int ssl, struct us_socket_t *s, char *buf, int *length) {
+ struct bsd_addr_t addr;
+ if (bsd_local_addr(us_poll_fd(&s->p), &addr) || *length < bsd_addr_get_ip_length(&addr)) {
+ *length = 0;
+ } else {
+ *length = bsd_addr_get_ip_length(&addr);
+ memcpy(buf, bsd_addr_get_ip(&addr), *length);
+ }
+}
+
struct us_socket_context_t *us_socket_context(int ssl, struct us_socket_t *s) {
return s->context;
}
@@ -301,4 +311,4 @@ unsigned int us_get_remote_address_info(char *buf, struct us_socket_t *s, const
*port = bsd_addr_get_port(&addr);
return length;
-} \ No newline at end of file
+}