mirror of
https://github.com/cesanta/mongoose.git
synced 2025-08-06 13:37:34 +08:00
Removed mg_set_listening_socket() and mg_get_listening_socket(), added mg_copy_listeners()
This commit is contained in:
parent
2cce91de9a
commit
f059e41cac
@ -26,9 +26,9 @@ int main(void) {
|
|||||||
server1 = mg_create_server((void *) "1", ev_handler);
|
server1 = mg_create_server((void *) "1", ev_handler);
|
||||||
server2 = mg_create_server((void *) "2", ev_handler);
|
server2 = mg_create_server((void *) "2", ev_handler);
|
||||||
|
|
||||||
// Make both server1 and server2 listen on the same socket
|
// Make both server1 and server2 listen on the same sockets
|
||||||
mg_set_option(server1, "listening_port", "8080");
|
mg_set_option(server1, "listening_port", "8080");
|
||||||
//mg_set_listening_socket(server2, mg_get_listening_socket(server1));
|
mg_copy_listeners(server1, server2);
|
||||||
|
|
||||||
// server1 goes to separate thread, server 2 runs in main thread.
|
// server1 goes to separate thread, server 2 runs in main thread.
|
||||||
// IMPORTANT: NEVER LET DIFFERENT THREADS HANDLE THE SAME SERVER.
|
// IMPORTANT: NEVER LET DIFFERENT THREADS HANDLE THE SAME SERVER.
|
||||||
|
30
mongoose.c
30
mongoose.c
@ -4807,9 +4807,8 @@ void mg_destroy_server(struct mg_server **server) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct mg_connection *mg_next(struct mg_server *s, struct mg_connection *c) {
|
struct mg_connection *mg_next(struct mg_server *s, struct mg_connection *c) {
|
||||||
struct connection *conn = MG_CONN_2_CONN(c);
|
struct ns_connection *nc = ns_next(&s->ns_mgr, c == NULL ? NULL :
|
||||||
struct ns_connection *nc = ns_next(&s->ns_mgr,
|
MG_CONN_2_CONN(c)->ns_conn);
|
||||||
c == NULL ? NULL : conn->ns_conn);
|
|
||||||
if (nc != NULL && nc->user_data != NULL) {
|
if (nc != NULL && nc->user_data != NULL) {
|
||||||
return & ((struct connection *) nc->user_data)->mg_conn;
|
return & ((struct connection *) nc->user_data)->mg_conn;
|
||||||
} else {
|
} else {
|
||||||
@ -4923,6 +4922,18 @@ const char **mg_get_valid_option_names(void) {
|
|||||||
return static_config_options;
|
return static_config_options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mg_copy_listeners(struct mg_server *s, struct mg_server *to) {
|
||||||
|
struct ns_connection *c;
|
||||||
|
for (c = ns_next(&s->ns_mgr, NULL); c != NULL; c = ns_next(&s->ns_mgr, c)) {
|
||||||
|
struct ns_connection *tmp;
|
||||||
|
if ((c->flags & NSF_LISTENING) && (tmp = malloc(sizeof(*tmp))) != NULL) {
|
||||||
|
memcpy(tmp, c, sizeof(*tmp));
|
||||||
|
tmp->mgr = &to->ns_mgr;
|
||||||
|
ns_add_conn(tmp->mgr, tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int get_option_index(const char *name) {
|
static int get_option_index(const char *name) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -5209,19 +5220,6 @@ void mg_wakeup_server(struct mg_server *server) {
|
|||||||
ns_broadcast(&server->ns_mgr, NULL, (void *) "", 0);
|
ns_broadcast(&server->ns_mgr, NULL, (void *) "", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
void mg_set_listening_socket(struct mg_server *server, int sock) {
|
|
||||||
if (server->ns_mgr.listening_sock != INVALID_SOCKET) {
|
|
||||||
closesocket(server->ns_mgr.listening_sock);
|
|
||||||
}
|
|
||||||
server->ns_mgr.listening_sock = (sock_t) sock;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mg_get_listening_socket(struct mg_server *server) {
|
|
||||||
return server->ns_mgr.listening_sock;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *mg_get_option(const struct mg_server *server, const char *name) {
|
const char *mg_get_option(const struct mg_server *server, const char *name) {
|
||||||
const char **opts = (const char **) server->config_options;
|
const char **opts = (const char **) server->config_options;
|
||||||
int i = get_option_index(name);
|
int i = get_option_index(name);
|
||||||
|
@ -93,8 +93,7 @@ const char *mg_set_option(struct mg_server *, const char *opt, const char *val);
|
|||||||
int mg_poll_server(struct mg_server *, int milliseconds);
|
int mg_poll_server(struct mg_server *, int milliseconds);
|
||||||
const char **mg_get_valid_option_names(void);
|
const char **mg_get_valid_option_names(void);
|
||||||
const char *mg_get_option(const struct mg_server *server, const char *name);
|
const char *mg_get_option(const struct mg_server *server, const char *name);
|
||||||
void mg_set_listening_socket(struct mg_server *, int sock);
|
void mg_copy_listeners(struct mg_server *from, struct mg_server *to);
|
||||||
int mg_get_listening_socket(struct mg_server *);
|
|
||||||
struct mg_connection *mg_next(struct mg_server *, struct mg_connection *);
|
struct mg_connection *mg_next(struct mg_server *, struct mg_connection *);
|
||||||
void mg_wakeup_server(struct mg_server *);
|
void mg_wakeup_server(struct mg_server *);
|
||||||
void mg_wakeup_server_ex(struct mg_server *, mg_handler_t, const char *, ...);
|
void mg_wakeup_server_ex(struct mg_server *, mg_handler_t, const char *, ...);
|
||||||
|
Loading…
Reference in New Issue
Block a user