lua - 使用bind()创建带有Lua Socket的服务器

标签 lua luasocket

LuaSocket 合作,此代码有效:

local socket = require'socket'
local server = socket.bind('*',51423)
local client = server:accept()

但是这段代码失败了:

local socket = require 'socket'
local server = socket.tcp()
server:bind('*',51423)
local client = server:accept()    
--> lua: /tmp/server.lua:4: calling 'accept' on bad self (tcp{server} expected, got userdata)

但是 TCP bind 的文档暗示后者应该有效,并指出:

"Note: The function socket.bind is available and is a shortcut for the creation of server sockets."

如何将通用“主”对象转换为服务器?

<小时/>

这样做的动机是希望在绑定(bind)操作本身上添加超时:

local socket = require'socket'
local server = socket.tcp()
server:settimeout(2/1000) -- Only wait 2ms when attempting to bind
server:bind('*',51423)

最佳答案

答案位于同一文档页面的顶部(哎呀):

"A master object can be transformed into a server … with the method listen (after a call to bind)"

看起来s = socket.bind(…)实际上相当于:

s = socket.tcp()
s:bind(…)
s:listen(32)

我不确定为什么它们被分成两个函数,但修改代码以添加 listen() 会使其工作:

local socket = require 'socket'
local server = socket.tcp()
server:bind('*',51423)
server:listen(32)
local client = server:accept()    

关于lua - 使用bind()创建带有Lua Socket的服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511583/

相关文章:

lua - 使用 NodeMCU 检查电池状态?

timer - Lua - 套接字接收其他事件的计时器

eclipse - Windows 中的 LuaSocket - 如何在 Eclipse 项目中安装和使用它

syntax - 在 Lua 中返回多个整数并将它们作为多个参数传递

Lua 'end' 预期(在 'function' 附近的行关闭 '<eof>'

sockets - 在 Luasocket 中,即使在 select 告诉它可以安全读取之后,在什么情况下 accept 调用也会阻塞?

Lua 5.2 添加 luasocket (不稳定)

sockets - Lua HTTP 下载并保存到文件

regex - 在 Lua 中使用字符串模式获取一组括号内部和外部的字符串字符?

lua - Lua 可以与 Hadoop 对话吗?