Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

feat(node/net): add SocketAddress #17154

Open
wants to merge 51 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
95f8f7e
wip: start net.SocketAddress
DonIsaac Feb 7, 2025
eb97edb
wip. need to use sockaddr_storage
DonIsaac Feb 7, 2025
087e768
make it available to js
DonIsaac Feb 7, 2025
7fdfb3f
`bun run zig-format`
DonIsaac Feb 7, 2025
5eb5885
move SocketAddress to bun.js/api and replace JSSocketAddress
DonIsaac Feb 8, 2025
23ebb03
cleanup
DonIsaac Feb 10, 2025
00351d3
Merge branch 'main' of github.com:oven-sh/bun into don/feat/net-sockaddr
DonIsaac Feb 10, 2025
7a1eed0
fix socklen_t
DonIsaac Feb 10, 2025
3a6d1ec
remove isSocketAddress from native impl
DonIsaac Feb 10, 2025
0ef8cb5
add SocketAddress wrapper
DonIsaac Feb 10, 2025
070fa0b
fix: invalid sentinel access when parsing addresses
DonIsaac Feb 10, 2025
f08c06b
updates tests + cleanup
DonIsaac Feb 11, 2025
08836f5
make validation match node
DonIsaac Feb 11, 2025
2ca38f7
maybe windows is happy now?
DonIsaac Feb 11, 2025
2cd75fd
`bun run zig-format`
DonIsaac Feb 11, 2025
2ba3f58
cleanup
DonIsaac Feb 11, 2025
14787b1
UAF in server.getAddress
DonIsaac Feb 11, 2025
a38d999
`bun run zig-format`
DonIsaac Feb 11, 2025
174001c
Merge branch 'main' of github.com:oven-sh/bun into don/feat/net-sockaddr
DonIsaac Feb 11, 2025
c7045b4
here we go again
DonIsaac Feb 11, 2025
45f4393
Merge branch 'main' of github.com:oven-sh/bun into don/feat/net-sockaddr
DonIsaac Feb 11, 2025
eb91609
Merge branch 'main' of github.com:oven-sh/bun into don/feat/net-sockaddr
DonIsaac Feb 11, 2025
3c60d1b
more testing
DonIsaac Feb 11, 2025
69ddc61
windows compat
DonIsaac Feb 11, 2025
c1a9ebf
more win32 compat
DonIsaac Feb 11, 2025
1ad8375
add kInspect and estimatedSize
DonIsaac Feb 11, 2025
3f3386f
deref address in .create
DonIsaac Feb 11, 2025
0e6b1bf
fix leak from family str in constructor
DonIsaac Feb 13, 2025
cf965b2
fix (hopefully) final memory leak
DonIsaac Feb 13, 2025
87eadff
Merge branch 'main' of github.com:oven-sh/bun into don/feat/net-sockaddr
DonIsaac Feb 13, 2025
935330b
re-add native toJSON()
DonIsaac Feb 14, 2025
56eb9a3
`bun run zig-format`
DonIsaac Feb 14, 2025
208bfeb
maybe fix leaked ref
DonIsaac Feb 14, 2025
3135a95
update leak test
DonIsaac Feb 14, 2025
87e9c00
yeah, its not leaking memory
DonIsaac Feb 14, 2025
0ba8356
shrink struct size by using .Dead instead of null
DonIsaac Feb 14, 2025
471752e
Merge branch 'main' of github.com:oven-sh/bun into don/feat/net-sockaddr
DonIsaac Feb 14, 2025
ce42360
`bun run zig-format`
DonIsaac Feb 14, 2025
5b80b73
wip
DonIsaac Feb 14, 2025
7dcc76c
Merge branch 'main' of github.com:oven-sh/bun into don/feat/net-sockaddr
DonIsaac Feb 18, 2025
14059c8
add SocketAddressDTO
DonIsaac Feb 18, 2025
92963d2
`bun run zig-format`
DonIsaac Feb 18, 2025
10b146c
cleanup
DonIsaac Feb 18, 2025
2892f3d
`bun run zig-format`
DonIsaac Feb 18, 2025
0086418
use WTF::StaticStringImpl for AF
DonIsaac Feb 18, 2025
d5c94df
Merge branch 'main' into don/feat/net-sockaddr
DonIsaac Feb 18, 2025
879a826
fix: visit structure
DonIsaac Feb 18, 2025
a103c53
pr feedback
DonIsaac Feb 19, 2025
c1c0447
extern -> extern "C"
DonIsaac Feb 19, 2025
743422c
fix: ref count assertions for static strings
DonIsaac Feb 19, 2025
4a6b00d
fix
DonIsaac Feb 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 23 additions & 15 deletions src/bun.js/api/bun/socket.zig
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ const Async = bun.Async;
const uv = bun.windows.libuv;
const H2FrameParser = @import("./h2_frame_parser.zig").H2FrameParser;
const NodePath = @import("../../node/path.zig");

pub const SocketAddress = @import("./socket/SocketAddress.zig");

noinline fn getSSLException(globalThis: *JSC.JSGlobalObject, defaultMessage: []const u8) JSValue {
var zig_str: ZigString = ZigString.init("");
var output_buf: [4096]u8 = undefined;
Expand Down Expand Up @@ -313,6 +316,24 @@ pub const SocketConfig = struct {
reusePort: bool = false,
ipv6Only: bool = false,

pub fn socketFlags(this: *const SocketConfig) i32 {
var flags: i32 = if (this.exclusive)
uws.LIBUS_LISTEN_EXCLUSIVE_PORT
else if (this.reusePort)
uws.LIBUS_LISTEN_REUSE_PORT | uws.LIBUS_LISTEN_REUSE_ADDR
else
uws.LIBUS_LISTEN_DEFAULT;

if (this.allowHalfOpen) {
flags |= uws.LIBUS_SOCKET_ALLOW_HALF_OPEN;
}
if (this.ipv6Only) {
flags |= uws.LIBUS_SOCKET_IPV6_ONLY;
}

return flags;
}

pub fn fromJS(vm: *JSC.VirtualMachine, opts: JSC.JSValue, globalObject: *JSC.JSGlobalObject) bun.JSError!SocketConfig {
var hostname_or_unix: JSC.ZigString.Slice = JSC.ZigString.Slice.empty;
errdefer hostname_or_unix.deinit();
Expand Down Expand Up @@ -609,25 +630,12 @@ pub const Listener = struct {
var ssl = socket_config.ssl;
var handlers = socket_config.handlers;
var protos: ?[]const u8 = null;
const exclusive = socket_config.exclusive;
handlers.is_server = true;

const ssl_enabled = ssl != null;

var socket_flags: i32 = if (exclusive)
uws.LIBUS_LISTEN_EXCLUSIVE_PORT
else if (socket_config.reusePort)
uws.LIBUS_LISTEN_REUSE_PORT | uws.LIBUS_LISTEN_REUSE_ADDR
else
uws.LIBUS_LISTEN_DEFAULT;

if (socket_config.allowHalfOpen) {
socket_flags |= uws.LIBUS_SOCKET_ALLOW_HALF_OPEN;
}
if (socket_config.ipv6Only) {
socket_flags |= uws.LIBUS_SOCKET_IPV6_ONLY;
}
defer if (ssl != null) ssl.?.deinit();
const socket_flags = socket_config.socketFlags();
defer if (ssl) |*_ssl| _ssl.deinit();

if (Environment.isWindows) {
if (port == null) {
Expand Down
Loading