bugfix: close socket once when harbor disconnected

This commit is contained in:
云风
2014-01-13 15:54:47 +08:00
parent 1230ea1a17
commit 750e0733f3

View File

@@ -183,10 +183,12 @@ _update_name(struct master *m, uint32_t handle, const char * buffer, size_t sz)
static void static void
close_harbor(struct master *m, int harbor_id) { close_harbor(struct master *m, int harbor_id) {
struct skynet_context * context = m->ctx; if (m->connected[harbor_id]) {
skynet_socket_close(context, m->remote_fd[harbor_id]); struct skynet_context * context = m->ctx;
m->remote_fd[harbor_id] = -1; skynet_socket_close(context, m->remote_fd[harbor_id]);
m->connected[harbor_id] = false; m->remote_fd[harbor_id] = -1;
m->connected[harbor_id] = false;
}
} }
static void static void
@@ -236,10 +238,11 @@ dispatch_socket(struct master *m, const struct skynet_socket_message *msg, int s
assert(id); assert(id);
on_connected(m, id); on_connected(m, id);
break; break;
case SKYNET_SOCKET_TYPE_CLOSE:
case SKYNET_SOCKET_TYPE_ERROR: case SKYNET_SOCKET_TYPE_ERROR:
close_harbor(m, id);
skynet_error(m->ctx, "socket error on harbor %d", id); skynet_error(m->ctx, "socket error on harbor %d", id);
// go though, close socket
case SKYNET_SOCKET_TYPE_CLOSE:
close_harbor(m, id);
break; break;
default: default:
skynet_error(m->ctx, "Invalid socket message type %d", msg->type); skynet_error(m->ctx, "Invalid socket message type %d", msg->type);