예제 #1
0
파일: network.c 프로젝트: tjohann/libbaalue
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;
}
예제 #2
0
파일: server.c 프로젝트: janas/unix-project
/**
 * 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;
}
예제 #3
0
파일: network.c 프로젝트: tjohann/libbaalue
BAALUE_EXPORT int
baa_inet_dgram_server(const char *service)
{
	return bind_inet_socket(service, SOCK_DGRAM, 0);
}