/** * HTTTP daemon listener entry point * * @param listener The Listener DCB * @param config Configuration (ip:port) */ static int httpd_listen(DCB *listener, char *config) { struct sockaddr_in addr; int one = 1; int rc; memcpy(&listener->func, &MyObject, sizeof(GWPROTOCOL)); if (!parse_bindconfig(config, 6442, &addr)) return 0; if ((listener->fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { return 0; } /* socket options */ setsockopt(listener->fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one)); /* set NONBLOCKING mode */ setnonblocking(listener->fd); /* bind address and port */ if (bind(listener->fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { return 0; } rc = listen(listener->fd, SOMAXCONN); if (rc == 0) { fprintf(stderr, "Listening http connections at %s\n", config); } else { int eno = errno; errno = 0; fprintf(stderr, "\n* Failed to start listening http due error %d, %s\n\n", eno, strerror(eno)); return 0; } if (poll_add_dcb(listener) == -1) { return 0; } return 1; }
/** * Telnet daemon listener entry point * * @param listener The Listener DCB * @param config Configuration (ip:port) */ static int telnetd_listen(DCB *listener, char *config) { struct sockaddr_in addr; int one = 1; int rc; int syseno = 0; memcpy(&listener->func, &MyObject, sizeof(GWPROTOCOL)); if (!parse_bindconfig(config, 4442, &addr)) return 0; if ((listener->fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { return 0; } // socket options syseno = setsockopt(listener->fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one)); if(syseno != 0){ LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,"Error: Failed to set socket options. Error %d: %s",errno,strerror(errno)))); return 0; } // set NONBLOCKING mode setnonblocking(listener->fd); // bind address and port if (bind(listener->fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { return 0; } rc = listen(listener->fd, SOMAXCONN); if (rc == 0) { LOGIF(LM, (skygw_log_write_flush(LOGFILE_MESSAGE,"Listening telnet connections at %s", config))); } else { int eno = errno; errno = 0; fprintf(stderr, "\n* Failed to start listening telnet due error %d, %s\n\n", eno, strerror(eno)); return 0; } if (poll_add_dcb(listener) == -1) { return 0; } return 1; }