add socket.limit for defence

This commit is contained in:
Cloud Wu
2014-07-12 20:30:02 +08:00
parent 54e6d03d36
commit 3a5de32ad0
3 changed files with 23 additions and 3 deletions

View File

@@ -2,6 +2,7 @@ local driver = require "socketdriver"
local skynet = require "skynet"
local assert = assert
local buffer_limit = -1
local socket = {} -- api
local buffer_pool = {} -- store all message buffer object
local socket_pool = setmetatable( -- store all socket object
@@ -47,7 +48,13 @@ socket_message[1] = function(id, size, data)
return
end
local sz = driver.push(s.buffer, buffer_pool, data, size)
local ok , sz = pcall(driver.push, s.buffer, buffer_pool, data, size)
if not ok then
skynet.error("socket: error on ", id , sz)
driver.clear(s.buffer,buffer_pool)
driver.close(id)
return
end
local rr = s.read_required
local rrt = type(rr)
if rrt == "number" then
@@ -123,7 +130,7 @@ skynet.register_protocol {
local function connect(id, func)
local newbuffer
if func == nil then
newbuffer = driver.buffer()
newbuffer = driver.buffer(buffer_limit)
end
local s = {
id = id,
@@ -318,4 +325,8 @@ function socket.abandon(id)
socket_pool[id] = nil
end
function socket.limit(limit)
buffer_limit = limit
end
return socket