BAALUE_EXPORT int baa_inet_stream_server(const char *service) { int sfd = bind_inet_socket(service, SOCK_STREAM, USE_LISTEN); if (sfd == -1) return -1; if (listen(sfd, BACKLOG) == -1) { baa_errno_msg(_("listen in %s"), __FUNCTION__); return -1; } return sfd; }
/** * The main procedure. * @param argc The command line. * @param argv The number of options in the command line. * @retval EXIT_SUCCESS Upon successful termination. * @retval EXIT_FAILURE When an error occurs. */ int main(int argc, char **argv) { int port, fifo, listener_socket; if (argc != 2) { usage(argv[0]); return EXIT_FAILURE; } port = atoi(argv[1]); if (port <= 0 || port > 65535) { usage(argv[0]); return EXIT_FAILURE; } if (mkfifo(FIFO_NAME, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP) < 0) if (errno != EEXIST) { perror("Create fifo:"); exit(EXIT_FAILURE); } if ((fifo = TEMP_FAILURE_RETRY(open(FIFO_NAME, O_RDWR))) < 0) { perror("Open fifo:"); exit(EXIT_FAILURE); } if (sethandler(sigint_handler, SIGINT)) { ERR("Setting SIGINT:"); } if (sethandler(sig_update_handler, SIGRTMIN + 11)) { ERR("Setting SIGRTMIN+11:"); } listener_socket = bind_inet_socket(port, SOCK_STREAM); doServer(listener_socket, fifo); if (TEMP_FAILURE_RETRY(close(listener_socket)) < 0) { ERR("Close:"); } if (TEMP_FAILURE_RETRY(close(fifo)) < 0) { ERR("Close fifo:"); } if (TEMP_FAILURE_RETRY(unlink(FIFO_NAME)) < 0) { ERR("Unlink fifo:"); } printf("Server has terminated normally.\n"); return EXIT_SUCCESS; }
BAALUE_EXPORT int baa_inet_dgram_server(const char *service) { return bind_inet_socket(service, SOCK_DGRAM, 0); }