mirror of
https://github.com/owntone/owntone-server.git
synced 2025-01-12 15:33:23 -05:00
Make port optional config value, searching for unused port if necessary. Closes #110
This commit is contained in:
parent
88999e7d49
commit
41aabeeab9
@ -102,7 +102,7 @@ static int _conf_verify_element(char *section, char *key, char *value);
|
||||
static CONF_ELEMENTS conf_elements[] = {
|
||||
{ 1, 0, CONF_T_STRING,"general","runas" },
|
||||
{ 1, 0, CONF_T_EXISTPATH,"general","web_root" },
|
||||
{ 1, 0, CONF_T_INT,"general","port" },
|
||||
{ 0, 0, CONF_T_INT,"general","port" },
|
||||
{ 1, 0, CONF_T_STRING,"general","admin_pw" },
|
||||
{ 1, 0, CONF_T_MULTICOMMA,"general","mp3_dir" },
|
||||
{ 0, 1, CONF_T_EXISTPATH,"general","db_dir" },
|
||||
@ -733,6 +733,7 @@ int conf_read(char *file) {
|
||||
ll_destroy(pllnew);
|
||||
ll_destroy(pllcomment);
|
||||
DPRINTF(E_LOG,L_CONF,"Could not validate config file. Ignoring\n");
|
||||
return CONF_E_BADCONFIG;
|
||||
}
|
||||
|
||||
return CONF_E_SUCCESS;
|
||||
|
@ -34,6 +34,7 @@
|
||||
#define CONF_E_BADELEMENT 9
|
||||
#define CONF_E_PATHEXPECTED 10
|
||||
#define CONF_E_INTEXPECTED 11
|
||||
#define CONF_E_BADCONFIG 12
|
||||
|
||||
extern int conf_read(char *file);
|
||||
extern int conf_reload(void);
|
||||
|
@ -408,7 +408,7 @@ int main(int argc, char *argv[]) {
|
||||
/* start up the web server */
|
||||
web_root = conf_alloc_string("general","web_root",NULL);
|
||||
ws_config.web_root=web_root;
|
||||
ws_config.port=conf_get_int("general","port",3689);
|
||||
ws_config.port=conf_get_int("general","port",0);
|
||||
|
||||
DPRINTF(E_LOG,L_MAIN|L_WS,"Starting web server from %s on port %d\n",
|
||||
ws_config.web_root, ws_config.port);
|
||||
|
@ -203,6 +203,8 @@ void ws_unlock_connlist(WS_PRIVATE *pwsp) {
|
||||
*/
|
||||
WSHANDLE ws_start(WSCONFIG *config) {
|
||||
int err;
|
||||
int ephemeral = 0;
|
||||
|
||||
WS_PRIVATE *pwsp;
|
||||
|
||||
DPRINTF(E_SPAM,L_WS,"Entering ws_start\n");
|
||||
@ -232,15 +234,38 @@ WSHANDLE ws_start(WSCONFIG *config) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DPRINTF(E_INF,L_WS,"Preparing to listen on port %d\n",pwsp->wsconfig.port);
|
||||
/* this is kind of stupid, but is easier to fix once here
|
||||
* rather than mucking with differences in sockets on windows/unix
|
||||
*/
|
||||
|
||||
if((pwsp->server_fd = u_open(pwsp->wsconfig.port)) == -1) {
|
||||
err=errno;
|
||||
DPRINTF(E_LOG,L_WS,"Could not open port: %s\n",strerror(errno));
|
||||
errno=err;
|
||||
return NULL;
|
||||
if(pwsp->wsconfig.port == 0) {
|
||||
pwsp->wsconfig.port = 1024; /* start with default port */
|
||||
ephemeral = 1;
|
||||
}
|
||||
|
||||
while(1) {
|
||||
DPRINTF(E_INF,L_WS,"Listening on port %d\n",pwsp->wsconfig.port);
|
||||
pwsp->server_fd = u_open(pwsp->wsconfig.port);
|
||||
if(pwsp->server_fd == -1) {
|
||||
if((!ephemeral) || (errno != EADDRINUSE)) {
|
||||
err = errno;
|
||||
DPRINTF(E_LOG,L_WS,"Listen port: %s\n",strerror(errno));
|
||||
errno = err;
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
pwsp->wsconfig.port++;
|
||||
if(!pwsp->wsconfig.port) {
|
||||
DPRINTF(E_LOG,L_WS,"Exhausted ports\n");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
config->port = pwsp->wsconfig.port;
|
||||
|
||||
DPRINTF(E_INF,L_WS,"Starting server thread\n");
|
||||
if((err=pthread_create(&pwsp->server_tid,NULL,ws_mainthread,(void*)pwsp))) {
|
||||
DPRINTF(E_LOG,L_WS,"Could not spawn thread: %s\n",strerror(err));
|
||||
|
Loading…
Reference in New Issue
Block a user