使用bind()创建一个带Lua Socket的服务器

时间:2013-12-11 05:56:34

标签: 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的文档暗示后者应该有用,说明:

  

“注意:函数socket.bind可用,是创建服务器套接字的快捷方式。”

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


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

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

1 个答案:

答案 0 :(得分:4)

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

  

“主对象可以转换为服务器...使用方法listen(在调用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()