diff options
Diffstat (limited to 'src/socket.c')
-rw-r--r-- | src/socket.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/socket.c b/src/socket.c index 6f1bb87..8b25073 100644 --- a/src/socket.c +++ b/src/socket.c @@ -49,7 +49,8 @@ switch_eids (uid_t *puid, gid_t *pgid, mode_t *pumask) } int -create_socket (struct pies_url *url, const char *user, mode_t umaskval) +create_socket (struct pies_url *url, int socket_type, + const char *user, mode_t umaskval) { int rc; int fd; @@ -64,9 +65,9 @@ create_socket (struct pies_url *url, const char *user, mode_t umaskval) gid_t gid = 0; int switch_back; - if (strcmp (url->proto, "unix") == 0 - || strcmp (url->proto, "file") == 0 - || strcmp (url->proto, "socket") == 0) + if (strcmp (url->scheme, "unix") == 0 + || strcmp (url->scheme, "file") == 0 + || strcmp (url->scheme, "socket") == 0) { struct stat st; const char *group = NULL; @@ -169,7 +170,7 @@ create_socket (struct pies_url *url, const char *user, mode_t umaskval) } } } - else if (strcmp (url->proto, "inet") == 0) + else if (strcmp (url->scheme, "inet") == 0) { const char *host = url->host; short port = url->port; @@ -209,7 +210,7 @@ create_socket (struct pies_url *url, const char *user, mode_t umaskval) return -1; } - fd = socket (addr.sa.sa_family, SOCK_STREAM, 0); + fd = socket (addr.sa.sa_family, socket_type, url->proto); if (fd == -1) { logmsg (LOG_ERR, _("%s: cannot create socket: %s"), @@ -409,9 +410,9 @@ fd_set listenset; int fd_max; int -register_listener (int fd) +register_socket (int socktype, int fd) { - if (listen (fd, 8) == -1) + if (socktype == SOCK_STREAM && listen (fd, 8) == -1) { logmsg (LOG_ERR, "listen: %s", strerror (errno)); return 1; @@ -422,6 +423,20 @@ register_listener (int fd) return 0; } +int +disable_socket (int fd) +{ + debug (2, (_("disabling fd %d"), fd)); + FD_CLR (fd, &listenset); +} + +int +enable_socket (int fd) +{ + debug (2, (_("enabling fd %d"), fd)); + FD_SET (fd, &listenset); +} + void pies_pause () { @@ -437,6 +452,7 @@ pies_pause () if (FD_ISSET (i, &rdset)) progman_accept (i); } + break; } else if (rc < 0) { |