-/*
- * This is a generic function to set up a master socket for listening on
- * a TCP port. The server shuts down if the bind fails.
- *
- * ip_addr IP address to bind
- * port_number port number to bind
- * queue_len number of incoming connections to allow in the queue
- */
-int ig_tcp_server(char *ip_addr, int port_number, int queue_len)
-{
- struct sockaddr_in sin;
- int s, i;
-
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- if (ip_addr == NULL) {
- sin.sin_addr.s_addr = INADDR_ANY;
- } else {
- sin.sin_addr.s_addr = inet_addr(ip_addr);
- }
-
- if (sin.sin_addr.s_addr == INADDR_NONE) {
- sin.sin_addr.s_addr = INADDR_ANY;
- }
-
- if (port_number == 0) {
- lprintf(1, "Cannot start: no port number specified.\n");
- exit(WC_EXIT_BIND);
- }
- sin.sin_port = htons((u_short) port_number);
-
- s = socket(PF_INET, SOCK_STREAM, (getprotobyname("tcp")->p_proto));
- if (s < 0) {
- lprintf(1, "Can't create a socket: %s\n", strerror(errno));
- exit(WC_EXIT_BIND);
- }
- /* Set some socket options that make sense. */
- i = 1;
- setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
-
- fcntl(s, F_SETFL, O_NONBLOCK); /* maide: this statement is incorrect
- there should be a preceding F_GETFL
- and a bitwise OR with the previous
- fd flags */
-
- if (bind(s, (struct sockaddr *) &sin, sizeof(sin)) < 0) {
- lprintf(1, "Can't bind: %s\n", strerror(errno));
- exit(WC_EXIT_BIND);
- }
- if (listen(s, queue_len) < 0) {
- lprintf(1, "Can't listen: %s\n", strerror(errno));
- exit(WC_EXIT_BIND);
- }
- return (s);
-}
-
-
-
-/*
- * Create a Unix domain socket and listen on it
- * sockpath - file name of the unix domain socket
- * queue_len - Number of incoming connections to allow in the queue
- */
-int ig_uds_server(char *sockpath, int queue_len)
-{
- struct sockaddr_un addr;
- int s;
- int i;
- int actual_queue_len;
-
- actual_queue_len = queue_len;
- if (actual_queue_len < 5) actual_queue_len = 5;
-
- i = unlink(sockpath);
- if (i != 0) if (errno != ENOENT) {
- lprintf(1, "webcit: can't unlink %s: %s\n",
- sockpath, strerror(errno));
- exit(WC_EXIT_BIND);
- }
-
- memset(&addr, 0, sizeof(addr));
- addr.sun_family = AF_UNIX;
- safestrncpy(addr.sun_path, sockpath, sizeof addr.sun_path);
-
- s = socket(AF_UNIX, SOCK_STREAM, 0);
- if (s < 0) {
- lprintf(1, "webcit: Can't create a socket: %s\n",
- strerror(errno));
- exit(WC_EXIT_BIND);
- }
-
- if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
- lprintf(1, "webcit: Can't bind: %s\n",
- strerror(errno));
- exit(WC_EXIT_BIND);
- }
-
- if (listen(s, actual_queue_len) < 0) {
- lprintf(1, "webcit: Can't listen: %s\n",
- strerror(errno));
- exit(WC_EXIT_BIND);
- }