与 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 tobind
)"
看起来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/