///
///
///
/**
* @description dgram.Socket 对象是一个封装了数据包函数功能的 EventEmitter。
*
* DgramSocket 实例是由 dgram.createSocket() 创建的。创建 dgram.Socket 实例不需要使用 new 关键字。
*
* 创建方法:
* ```JavaScript
* var dgram = require('dgram');
* var sock = dgram.createSocket('udp4');
* ```
*
* ## 事件
* DgramSocket 继承于 EventEmitter,对象的状态变化,以及数据接受,都是以事件的方式实现。
*
* ### close 事件
* ** `close` 事件将在使用 `close()` 关闭一个 `socket` 之后触发。该事件一旦触发,这个 `socket` 上将不会触发新的 `message` 事件。**
*
* ### error 事件
* ** 当有任何错误发生时,`error` 事件将被触发。 **
*
* ### listening 事件
* ** 当一个 `socket` 开始监听数据包信息时,`listening` 事件将被触发。该事件会在创建 UDP socket 之后被立即触发。 **
*
* ### message 事件
* ** 当有新的数据包被 `socket` 接收时,`message` 事件会被触发。`msg` 和 `rinfo` 会作为参数传递到该事件的处理函数中。 **
* - msg: Buffer,消息
* - rinfo: Object,远程地址信息
* - address: string,发送方地址
* - family: string,地址类型 ('IPv4' or 'IPv6')
* - port: number,发送者端口
* - size: number,消息大小
*
*/
declare class Class_DgramSocket extends Class_EventEmitter {
/**
* @description 该方法会令 dgram.Socket 在指定的 `port` 和 `addr` 上监听数据包信息。绑定完成时会触发一个 `listening` 事件。
* @param port 指定绑定端口,若 `port` 未指定或为 0,操作系统会尝试绑定一个随机的端口
* @param addr 指定绑定地址,若 address 未指定,操作系统会尝试在所有地址上监听。
*
*/
bind(port?: number, addr?: string): void;
bind(port?: number, addr?: string, callback?: (err: Error | undefined | null)=>any): void;
/**
* @description 该方法会令 dgram.Socket 在 `opts` 指定的 `port` 和 `address` 上监听数据包信息。绑定完成时会触发一个 `listening` 事件。
* @param opts 指定绑定参数
*
*/
bind(opts: FIBJS.GeneralObject): void;
bind(opts: FIBJS.GeneralObject, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 在 socket 上发送一个数据包
* @param msg 指定发送的数据
* @param port 指定发送的目的端口
* @param address 指定发送的目的地址
* @return 返回发送尺寸
*
*/
send(msg: Class_Buffer, port: number, address?: string): number;
send(msg: Class_Buffer, port: number, address?: string, callback?: (err: Error | undefined | null, retVal: number)=>any): void;
/**
* @description 在 socket 上发送一个数据包
* @param msg 指定发送的数据
* @param offset 从指定偏移开始发送
* @param length 之发送指定长度
* @param port 指定发送的目的端口
* @param address 指定发送的目的地址
* @return 返回发送尺寸
*
*/
send(msg: Class_Buffer, offset: number, length: number, port: number, address?: string): number;
send(msg: Class_Buffer, offset: number, length: number, port: number, address?: string, callback?: (err: Error | undefined | null, retVal: number)=>any): void;
/**
* @description 返回一个包含 socket 地址信息的对象。对于 UDP socket,该对象将包含 address、family 和 port 属性。
* @return 返回对象绑定地址
*
*/
address(): FIBJS.GeneralObject;
/**
* @description 关闭当前 socket
*/
close(): void;
/**
* @description 关闭当前 socket
* @param callback 关闭完成后的回调函数,它相当于为 `close` 事件添加了一个监听器
*
*/
close(callback: (...args: any[])=>any): void;
/**
* @description 查询 socket 接收缓冲区大小
* @return 返回查询结果
*
*/
getRecvBufferSize(): number;
/**
* @description 查询 socket 发送缓冲区大小
* @return 返回查询结果
*
*/
getSendBufferSize(): number;
/**
* @description 设置 socket 接收缓冲区大小
* @param size 指定要设置的尺寸
*
*/
setRecvBufferSize(size: number): void;
/**
* @description 设置 socket 发送缓冲区大小
* @param size 指定要设置的尺寸
*
*/
setSendBufferSize(size: number): void;
/**
* @description 设置或清除 SO_BROADCAST socket 选项
* @param flag 当设置为 true, UDP包会被发送到一个本地接口的广播地址
*
*/
setBroadcast(flag: boolean): void;
/**
* @description 维持 fibjs 进程不退出,在对象绑定期间阻止 fibjs 进程退出
* @return 返回当前对象
*
*/
ref(): Class_DgramSocket;
/**
* @description 允许 fibjs 进程退出,在对象绑定期间允许 fibjs 进程退出
* @return 返回当前对象
*
*/
unref(): Class_DgramSocket;
}