mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
types: Missing methods on udp socket
This commit is contained in:
@@ -127,3 +127,54 @@ const socket = await Bun.udpSocket({
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
### Socket options
|
||||
|
||||
UDP sockets support setting various socket options:
|
||||
|
||||
```ts
|
||||
const socket = await Bun.udpSocket({});
|
||||
|
||||
// Enable broadcasting to send packets to a broadcast address
|
||||
socket.setBroadcast(true);
|
||||
|
||||
// Set the IP TTL (time to live) for outgoing packets
|
||||
socket.setTTL(64);
|
||||
```
|
||||
|
||||
### Multicast
|
||||
|
||||
Bun supports multicast operations for UDP sockets. Use `addMembership` and `dropMembership` to join and leave multicast groups:
|
||||
|
||||
```ts
|
||||
const socket = await Bun.udpSocket({});
|
||||
|
||||
// Join a multicast group
|
||||
socket.addMembership("224.0.0.1");
|
||||
|
||||
// Join with a specific interface
|
||||
socket.addMembership("224.0.0.1", "192.168.1.100");
|
||||
|
||||
// Leave a multicast group
|
||||
socket.dropMembership("224.0.0.1");
|
||||
```
|
||||
|
||||
Additional multicast options:
|
||||
|
||||
```ts
|
||||
// Set TTL for multicast packets (number of network hops)
|
||||
socket.setMulticastTTL(2);
|
||||
|
||||
// Control whether multicast packets loop back to the local socket
|
||||
socket.setMulticastLoopback(true);
|
||||
|
||||
// Specify which interface to use for outgoing multicast packets
|
||||
socket.setMulticastInterface("192.168.1.100");
|
||||
```
|
||||
|
||||
For source-specific multicast (SSM), use `addSourceSpecificMembership` and `dropSourceSpecificMembership`:
|
||||
|
||||
```ts
|
||||
socket.addSourceSpecificMembership("10.0.0.1", "232.0.0.1");
|
||||
socket.dropSourceSpecificMembership("10.0.0.1", "232.0.0.1");
|
||||
```
|
||||
|
||||
61
packages/bun-types/bun.d.ts
vendored
61
packages/bun-types/bun.d.ts
vendored
@@ -5470,6 +5470,67 @@ declare module "bun" {
|
||||
ref(): void;
|
||||
unref(): void;
|
||||
close(): void;
|
||||
/**
|
||||
* Enable or disable SO_BROADCAST socket option.
|
||||
* @param enabled Whether to enable broadcast
|
||||
* @returns The enabled value
|
||||
*/
|
||||
setBroadcast(enabled: boolean): boolean;
|
||||
/**
|
||||
* Set the IP_TTL socket option.
|
||||
* @param ttl Time to live value
|
||||
* @returns The TTL value
|
||||
*/
|
||||
setTTL(ttl: number): number;
|
||||
/**
|
||||
* Set the IP_MULTICAST_TTL socket option.
|
||||
* @param ttl Time to live value for multicast packets
|
||||
* @returns The TTL value
|
||||
*/
|
||||
setMulticastTTL(ttl: number): number;
|
||||
/**
|
||||
* Enable or disable IP_MULTICAST_LOOP socket option.
|
||||
* @param enabled Whether to enable multicast loopback
|
||||
* @returns The enabled value
|
||||
*/
|
||||
setMulticastLoopback(enabled: boolean): boolean;
|
||||
/**
|
||||
* Set the IP_MULTICAST_IF socket option to specify the outgoing interface
|
||||
* for multicast packets.
|
||||
* @param interfaceAddress The address of the interface to use
|
||||
* @returns true on success
|
||||
*/
|
||||
setMulticastInterface(interfaceAddress: string): boolean;
|
||||
/**
|
||||
* Join a multicast group.
|
||||
* @param multicastAddress The multicast group address
|
||||
* @param interfaceAddress Optional interface address to use
|
||||
* @returns true on success
|
||||
*/
|
||||
addMembership(multicastAddress: string, interfaceAddress?: string): boolean;
|
||||
/**
|
||||
* Leave a multicast group.
|
||||
* @param multicastAddress The multicast group address
|
||||
* @param interfaceAddress Optional interface address to use
|
||||
* @returns true on success
|
||||
*/
|
||||
dropMembership(multicastAddress: string, interfaceAddress?: string): boolean;
|
||||
/**
|
||||
* Join a source-specific multicast group.
|
||||
* @param sourceAddress The source address
|
||||
* @param groupAddress The multicast group address
|
||||
* @param interfaceAddress Optional interface address to use
|
||||
* @returns true on success
|
||||
*/
|
||||
addSourceSpecificMembership(sourceAddress: string, groupAddress: string, interfaceAddress?: string): boolean;
|
||||
/**
|
||||
* Leave a source-specific multicast group.
|
||||
* @param sourceAddress The source address
|
||||
* @param groupAddress The multicast group address
|
||||
* @param interfaceAddress Optional interface address to use
|
||||
* @returns true on success
|
||||
*/
|
||||
dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, interfaceAddress?: string): boolean;
|
||||
}
|
||||
|
||||
export interface ConnectedSocket<DataBinaryType extends BinaryType> extends BaseUDPSocket {
|
||||
|
||||
58
test/integration/bun-types/fixture/udp.ts
Normal file
58
test/integration/bun-types/fixture/udp.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import * as Bun from "bun";
|
||||
import { expectType } from "./utilities";
|
||||
|
||||
const socket = await Bun.udpSocket({
|
||||
port: 0,
|
||||
});
|
||||
|
||||
expectType(socket.hostname).is<string>();
|
||||
expectType(socket.port).is<number>();
|
||||
expectType(socket.address).is<Bun.SocketAddress>();
|
||||
expectType(socket.binaryType).is<Bun.BinaryType>();
|
||||
expectType(socket.closed).is<boolean>();
|
||||
|
||||
expectType(socket.send("Hello", 41234, "127.0.0.1")).is<boolean>();
|
||||
expectType(socket.send(new Uint8Array([1, 2, 3]), 41234, "127.0.0.1")).is<boolean>();
|
||||
expectType(socket.sendMany(["Hello", 41234, "127.0.0.1", "World", 41235, "127.0.0.2"])).is<number>();
|
||||
|
||||
expectType(socket.setBroadcast(true)).is<boolean>();
|
||||
expectType(socket.setTTL(64)).is<number>();
|
||||
expectType(socket.setMulticastTTL(2)).is<number>();
|
||||
expectType(socket.setMulticastLoopback(true)).is<boolean>();
|
||||
expectType(socket.setMulticastInterface("192.168.1.100")).is<boolean>();
|
||||
|
||||
expectType(socket.addMembership("224.0.0.1")).is<boolean>();
|
||||
expectType(socket.addMembership("224.0.0.1", "192.168.1.100")).is<boolean>();
|
||||
expectType(socket.dropMembership("224.0.0.1")).is<boolean>();
|
||||
expectType(socket.dropMembership("224.0.0.1", "192.168.1.100")).is<boolean>();
|
||||
|
||||
expectType(socket.addSourceSpecificMembership("10.0.0.1", "232.0.0.1")).is<boolean>();
|
||||
expectType(socket.addSourceSpecificMembership("10.0.0.1", "232.0.0.1", "192.168.1.100")).is<boolean>();
|
||||
expectType(socket.dropSourceSpecificMembership("10.0.0.1", "232.0.0.1")).is<boolean>();
|
||||
expectType(socket.dropSourceSpecificMembership("10.0.0.1", "232.0.0.1", "192.168.1.100")).is<boolean>();
|
||||
|
||||
expectType(socket.ref()).is<void>();
|
||||
expectType(socket.unref()).is<void>();
|
||||
|
||||
expectType(socket.close()).is<void>();
|
||||
|
||||
const connectedSocket = await Bun.udpSocket({
|
||||
port: 0,
|
||||
connect: {
|
||||
hostname: "127.0.0.1",
|
||||
port: 41234,
|
||||
},
|
||||
});
|
||||
|
||||
expectType(connectedSocket.remoteAddress).is<Bun.SocketAddress>();
|
||||
|
||||
expectType(connectedSocket.send("Hello")).is<boolean>();
|
||||
expectType(connectedSocket.send(new Uint8Array([1, 2, 3]))).is<boolean>();
|
||||
expectType(connectedSocket.sendMany(["Hello", "World"])).is<number>();
|
||||
|
||||
expectType(connectedSocket.setBroadcast(false)).is<boolean>();
|
||||
expectType(connectedSocket.setTTL(128)).is<number>();
|
||||
expectType(connectedSocket.setMulticastTTL(1)).is<number>();
|
||||
expectType(connectedSocket.setMulticastLoopback(false)).is<boolean>();
|
||||
|
||||
connectedSocket.close();
|
||||
Reference in New Issue
Block a user