From a5af5f6ba7213e912150d061eb276adee63f26ea Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Tue, 16 May 2023 15:59:43 +0800 Subject: [PATCH] Overload socket_read(), See #1750 --- lualib/skynet/socketchannel.lua | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lualib/skynet/socketchannel.lua b/lualib/skynet/socketchannel.lua index 251ecc28..871334c2 100644 --- a/lualib/skynet/socketchannel.lua +++ b/lualib/skynet/socketchannel.lua @@ -41,7 +41,17 @@ function socket_channel.channel(desc) __nodelay = desc.nodelay, __overload_notify = desc.overload, __overload = false, + __socket_meta = channel_socket_meta, } + if desc.socket_read or desc.socket_readline then + c.__socket_meta = { + __index = { + read = desc.socket_read or channel_socket.read, + readline = desc.socket_readline or channel_socket.readline, + }, + __gc = channel_socket_meta.__gc + } + end return setmetatable(c, channel_meta) end @@ -319,7 +329,7 @@ local function connect_once(self) skynet.yield() end - self.__sock = setmetatable( {fd} , channel_socket_meta ) + self.__sock = setmetatable( {fd} , self.__socket_meta ) self.__dispatch_thread = skynet.fork(function() if self.__sock then -- self.__sock can be false (socket closed) if error during connecting, See #1513