bugfix: connection closed

This commit is contained in:
云风
2013-02-05 11:14:45 +08:00
parent d30b8936e3
commit a1f10c29ff
3 changed files with 37 additions and 2 deletions

View File

@@ -108,7 +108,6 @@ connection_del(struct connection_pool * pool, int fd) {
EV_SET(&ke, fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);
kevent(pool->kqueue_fd, &ke, 1, NULL, 0, NULL);
#endif
close(fd);
}
static int

View File

@@ -87,11 +87,12 @@ _del(struct connection_server * server, int fd) {
if (c->fd == fd) {
if (c->close == 0) {
skynet_send(server->ctx, 0, c->address, PTYPE_CLIENT | PTYPE_TAG_DONTCOPY, 0, NULL, 0);
connection_del(server->pool, fd);
}
c->address = 0;
c->fd = 0;
c->close = 0;
connection_del(server->pool, fd);
close(fd);
return;
}
}
@@ -125,6 +126,7 @@ _poll(struct connection_server * server) {
if (c->close == 0) {
c->close = 1;
skynet_send(server->ctx, 0, c->address, PTYPE_CLIENT | PTYPE_TAG_DONTCOPY, 0, NULL, 0);
connection_del(server->pool, c->fd);
}
} else {
skynet_send(server->ctx, 0, c->address, PTYPE_CLIENT | PTYPE_TAG_DONTCOPY, 0, buffer, size);

View File

@@ -0,0 +1,34 @@
local skynet = require "skynet"
local socket = require "socket"
local server = "127.0.0.1:8866"
local function reconnect()
while socket.connect(server) do
skynet.sleep(1000)
print("reconnect to", server)
end
print(server, "connected")
end
skynet.register_protocol {
name = "client",
id = 3,
pack = function(...) return ... end,
unpack = function(msg,sz)
if sz == 0 then
skynet.timeout(0, reconnect)
return
end
print("sz=",sz,skynet.tostring(msg,sz))
end,
dispatch = function () end
}
skynet.start(function()
if socket.connect(server) then
print "use 'nc -l 8866' first to listen"
skynet.exit()
end
end)