struct list_item list;
struct waiter *waiter;
int fd;
+ bool remote_closed;
};
{
struct client *client;
- pb_log("current clients [%p,%p,%p]:\n",
+ pb_debug("current clients [%p,%p,%p]:\n",
&server->clients.head,
server->clients.head.prev,
server->clients.head.next);
list_for_each_entry(&server->clients, client, list)
- pb_log("\t[%p,%p,%p] client: %d\n", &client->list,
+ pb_debug("\t[%p,%p,%p] client: %d\n", &client->list,
client->list.prev, client->list.next,
client->fd);
}
{
int rc;
+ if (client->remote_closed)
+ return -1;
+
rc = pb_protocol_write_message(client->fd, message);
if (rc)
- talloc_free(client);
+ client->remote_closed = true;
return rc;
}
client->fd = fd;
client->server = server;
+ client->waiter = waiter_register_io(server->waitset, client->fd,
+ WAIT_IN, discover_server_process_message,
+ client);
/* send sysinfo to client */
rc = write_system_info_message(server, client, system_info_get());
}
}
- client->waiter = waiter_register_io(server->waitset, client->fd,
- WAIT_IN, discover_server_process_message,
- client);
-
return 0;
}