aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-usockets/src/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bun-usockets/src/socket.c')
-rw-r--r--packages/bun-usockets/src/socket.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/packages/bun-usockets/src/socket.c b/packages/bun-usockets/src/socket.c
index ce5203ccb..78185e681 100644
--- a/packages/bun-usockets/src/socket.c
+++ b/packages/bun-usockets/src/socket.c
@@ -280,3 +280,25 @@ int us_socket_raw_write(int ssl, struct us_socket_t *s, const char *data, int le
// non-TLS is always raw
return us_socket_write(ssl, s, data, length, msg_more);
}
+
+unsigned int us_get_remote_address_info(char *buf, struct us_socket_t *s, const char **dest, int *port, int *is_ipv6)
+{
+ // This function is manual inlining + modification of
+ // us_socket_remote_address
+ // AsyncSocket::getRemoteAddress
+ // To get { ip, port, is_ipv6 } for Bun.serve().requestIP()
+ struct bsd_addr_t addr;
+ if (bsd_remote_addr(us_poll_fd(&s->p), &addr)) {
+ return 0;
+ }
+
+ int length = bsd_addr_get_ip_length(&addr);
+ if (!length) {
+ return 0;
+ }
+
+ memcpy(buf, bsd_addr_get_ip(&addr), length);
+ *port = bsd_addr_get_port(&addr);
+
+ return length;
+} \ No newline at end of file