From c958a99b35ce293f68e9194b36b45d7c70a0e007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Thu, 9 Aug 2012 22:06:04 +0800 Subject: [PATCH] report new connection from gate --- gate/mread.c | 14 ++++++++++---- service/agent.lua | 5 +++++ service/watchdog.lua | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/gate/mread.c b/gate/mread.c index ab06575f..b610f560 100644 --- a/gate/mread.c +++ b/gate/mread.c @@ -212,24 +212,26 @@ _alloc_socket(struct mread_pool * self) { return s; } -static void +static struct socket * _add_client(struct mread_pool * self, int fd) { struct socket * s = _alloc_socket(self); if (s == NULL) { close(fd); - return; + return NULL; } struct epoll_event ev; ev.events = EPOLLIN; ev.data.ptr = s; if (epoll_ctl(self->epoll_fd, EPOLL_CTL_ADD, fd, &ev) == -1) { close(fd); - return; + return NULL; } s->fd = fd; s->node = NULL; s->status = SOCKET_SUSPEND; + + return s; } static int @@ -275,7 +277,11 @@ mread_poll(struct mread_pool * self , int timeout) { int client_fd = accept(self->listen_fd , (struct sockaddr *)&remote_addr , &len); if (client_fd >= 0) { // printf("MREAD connect %s:%u (fd=%d)\n",inet_ntoa(remote_addr.sin_addr),ntohs(remote_addr.sin_port), client_fd); - _add_client(self, client_fd); + struct socket * s = _add_client(self, client_fd); + if (s) { + self->active = -1; + return s - self->sockets; + } } } else { int index = s - self->sockets; diff --git a/service/agent.lua b/service/agent.lua index 9d90686c..d60676f3 100644 --- a/service/agent.lua +++ b/service/agent.lua @@ -1,4 +1,5 @@ local skynet = require "skynet" +local client = ... skynet.dispatch(function(msg, sz , session, address) local message = skynet.tostring(msg,sz) @@ -6,3 +7,7 @@ skynet.dispatch(function(msg, sz , session, address) local result = skynet.call("SIMPLEDB",message) skynet.send(address, result) end) + +skynet.start(function() + skynet.send(client,"Welcome to skynet") +end) diff --git a/service/watchdog.lua b/service/watchdog.lua index 04abf61b..7c89a366 100644 --- a/service/watchdog.lua +++ b/service/watchdog.lua @@ -10,8 +10,8 @@ function command:open(parm) local fd,addr = string.match(parm,"(%d+) ([^%s]+)") fd = tonumber(fd) print("agent open",self,string.format("%d %d %s",self,fd,addr)) - local agent = skynet.launch("snlua","agent") local client = skynet.launch("client",fd) + local agent = skynet.launch("snlua","agent",client) print("watchdog launch agent client:",agent,client) if agent then agent_all[self] = { agent , client }