#915 add og_socket_server_init()

Move code to create a socket into a function.
master
OpenGnSys Support Team 2019-05-18 14:28:38 +02:00
parent 107b17a51b
commit e3e4e6f677
1 changed files with 28 additions and 18 deletions

View File

@ -3720,13 +3720,37 @@ static void og_server_accept_cb(struct ev_loop *loop, struct ev_io *io,
ev_timer_start(loop, &cli->timer); ev_timer_start(loop, &cli->timer);
} }
static int og_socket_server_init(const char *port)
{
struct sockaddr_in local;
int sd, on = 1;
sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sd < 0) {
syslog(LOG_ERR, "cannot create main socket\n");
return -1;
}
setsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(int));
local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_family = AF_INET;
local.sin_port = htons(atoi(port));
if (bind(sd, (struct sockaddr *) &local, sizeof(local)) < 0) {
syslog(LOG_ERR, "cannot bind socket\n");
return -1;
}
listen(sd, 250);
return sd;
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
struct ev_loop *loop = ev_default_loop(0); struct ev_loop *loop = ev_default_loop(0);
struct ev_io ev_io_server; struct ev_io ev_io_server;
struct sockaddr_in local;
int socket_s; int socket_s;
int activo=1;
int i; int i;
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
@ -3754,23 +3778,9 @@ int main(int argc, char *argv[])
/*-------------------------------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------------------------------
Creación y configuración del socket del servicio Creación y configuración del socket del servicio
---------------------------------------------------------------------------------------------------------*/ ---------------------------------------------------------------------------------------------------------*/
socket_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Crea socket del servicio socket_s = og_socket_server_init(puerto);
setsockopt(socket_s, SOL_SOCKET, SO_REUSEPORT, &activo, sizeof(int)); if (socket_s < 0)
if (socket_s < 0) {
syslog(LOG_ERR, "cannot create main socket\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
}
local.sin_addr.s_addr = htonl(INADDR_ANY); // Configura el socket del servicio
local.sin_family = AF_INET;
local.sin_port = htons(atoi(puerto));
if (bind(socket_s, (struct sockaddr *) &local, sizeof(local)) < 0) {
syslog(LOG_ERR, "cannot bind socket\n");
exit(EXIT_FAILURE);
}
listen(socket_s, 250); // Pone a escuchar al socket
ev_io_init(&ev_io_server, og_server_accept_cb, socket_s, EV_READ); ev_io_init(&ev_io_server, og_server_accept_cb, socket_s, EV_READ);
ev_io_start(loop, &ev_io_server); ev_io_start(loop, &ev_io_server);