---@meta socket.unix

--------------------------------------------------------------------------------
-- LuaSocket Unix domain socket C 模块
--------------------------------------------------------------------------------

---@type socket_core*
local socket_core = require("socket.core")

---@class socket_unix_stream*: socket_core_tcp*
local socket_unix_stream = {}

---@class socket_unix_dgram*: socket_core_udp*
local socket_unix_dgram = {}

---@class socket_unix*
---@type socket_unix*
local M = {}

--- 创建 Unix stream socket。
---@return socket_unix_stream*? sock Unix stream socket
---@return string? errMsg 错误信息
function M.stream() end

--- 创建 Unix datagram socket。
---@return socket_unix_dgram*? sock Unix datagram socket
---@return string? errMsg 错误信息
function M.dgram() end

--- 兼容别名，等同 stream。
---@return socket_unix_stream*? sock Unix stream socket
---@return string? errMsg 错误信息
function M.tcp() end

--- 兼容别名，等同 dgram。
---@return socket_unix_dgram*? sock Unix datagram socket
---@return string? errMsg 错误信息
function M.udp() end

--- 连接 Unix socket。
---@param path string socket 路径
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_stream:connect(path) end

--- 绑定 Unix socket。
---@param path string socket 路径
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_stream:bind(path) end

--- 开始监听。
---@param backlog? integer backlog
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_stream:listen(backlog) end

--- 接受连接。
---@return socket_unix_stream*? client 客户端 socket
---@return string? errMsg 错误信息
function socket_unix_stream:accept() end

--- 发送数据。
---@param data string 数据
---@param from? integer 起始位置
---@param to? integer 结束位置
---@return integer? sent 已发送字节数
---@return string? errMsg 错误信息
---@return integer? lastIndex 最后发送位置
function socket_unix_stream:send(data, from, to) end

--- 接收数据。
---@param pattern? '*l'|'*a'|integer 接收模式
---@param prefix? string 前缀
---@return string? data 数据
---@return string? errMsg 错误信息
---@return string? partial 部分数据
function socket_unix_stream:receive(pattern, prefix) end

--- 关闭连接。
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_stream:close() end

--- 设置超时。
---@param timeout socket_core_timeout 超时秒数
---@param mode? 'b'|'r'|'s' 模式
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_stream:settimeout(timeout, mode) end

--- 获取本地 socket 路径。
---@return string? path socket 路径
---@return string? errMsg 错误信息
function socket_unix_stream:getsockname() end

--- 设置 socket 选项。
---@param option string 选项名
---@param value any 选项值
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_stream:setoption(option, value) end

--- 关闭单向或双向传输。
---@param mode? socket_shutdown_mode 关闭方向
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_stream:shutdown(mode) end

--- 获取底层 fd。
---@return integer fd 文件描述符
function socket_unix_stream:getfd() end

--- 替换底层 fd。
---@param fd integer 文件描述符
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_stream:setfd(fd) end

--- 查询缓冲区是否有未读数据。
---@return boolean dirty 是否有未读数据
function socket_unix_stream:dirty() end

--- 获取传输统计。
---@return integer received 已接收字节数
---@return integer sent 已发送字节数
---@return number age 创建后秒数
function socket_unix_stream:getstats() end

--- 设置传输统计。
---@param received? integer 已接收字节数
---@param sent? integer 已发送字节数
---@param age? number 创建后秒数
---@return integer? ok 成功时返回 1
function socket_unix_stream:setstats(received, sent, age) end

--- 连接 Unix datagram socket。
---@param path string socket 路径
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_dgram:connect(path) end

--- 绑定 Unix datagram socket。
---@param path string socket 路径
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_dgram:bind(path) end

--- 发送数据。
---@param data string 数据
---@return integer? sent 已发送字节数
---@return string? errMsg 错误信息
function socket_unix_dgram:send(data) end

--- 发送数据到指定 Unix socket。
---@param data string 数据
---@param path string socket 路径
---@return integer? sent 已发送字节数
---@return string? errMsg 错误信息
function socket_unix_dgram:sendto(data, path) end

--- 接收数据。
---@param size? integer 最大长度
---@return string? data 数据
---@return string? errMsg 错误信息
function socket_unix_dgram:receive(size) end

--- 接收数据和来源。
---@param size? integer 最大长度
---@return string? data 数据
---@return string? path 来源 socket 路径
function socket_unix_dgram:receivefrom(size) end

--- 获取本地 socket 路径。
---@return string? path socket 路径
---@return string? errMsg 错误信息
function socket_unix_dgram:getsockname() end

--- 设置超时。
---@param timeout socket_core_timeout 超时秒数
---@param mode? 'b'|'r'|'s' 模式
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_dgram:settimeout(timeout, mode) end

--- 获取超时设置。
---@return number? block 单次操作超时
---@return number? total 总超时
function socket_unix_dgram:gettimeout() end

--- 设置 socket 选项。
---@param option string 选项名
---@param value any 选项值
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_dgram:setoption(option, value) end

--- 获取底层 fd。
---@return integer fd 文件描述符
function socket_unix_dgram:getfd() end

--- 替换底层 fd。
---@param fd integer 文件描述符
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_dgram:setfd(fd) end

--- 查询 socket 是否有未读数据。
---@return boolean dirty 是否有未读数据
function socket_unix_dgram:dirty() end

--- 关闭 socket。
---@return integer? ok 成功时返回 1
---@return string? errMsg 错误信息
function socket_unix_dgram:close() end

return M
