使用bind()方法在Lua Socket中创建服务器。

通过使用 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) -- 仅在尝试绑定时等待2ms
server:bind('*',51423)
点赞
用户405017
用户405017

答案在同一文档页面的顶部(糟糕):

“一个主对象可以使用方法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()
2013-12-11 05:56:34