コード例 #1
0
ファイル: server.c プロジェクト: nishantmehta2010/CN-CS352-1
int main(int argc, char const *argv[]) {
	int usfd, nusfd, nsfd, sfd, i, j, len;
	pthread_t pid;
	pthread_mutex_init(&lock, NULL);
	usfd = init_sockbind("/tmp/sockpath");
	if(usfd < 0) {
		perror("init_sockbind() ");
		exit(1);
	}
	sfd = tcpsocket_bind(8001);
	if(sfd < 0) {
		perror("tcpsocket_bind() ");
		exit(2);
	}
	nusfd = sock_accept(usfd);
	if(nusfd < 0) {
		perror("sock_accept() ");
		exit(3);
	}

	struct ucred cred;
	len = sizeof(struct ucred);
	
	if(getsockopt(nusfd, SOL_SOCKET, SO_PEERCRED, &cred, &len) < 0) {
		perror("getsockopt() ");
		exit(4);
	}
	// printf("%ld\n", (long) cred.pid); // backup server pid
	pthread_create(&pid, NULL, &runner, NULL);
	while(1) {
		nsfd = tcp_accept(sfd);
		if(nsfd < 0) {
			perror("tcp_accept() ");
			continue;
		}
		if(nsfd_cnt == MAXF) {
			for (i = 0; i < MAXF; ++i) {
				pthread_mutex_lock(&lock);
				if(send_fd(nusfd, nsfds[i]) < 0) {
					perror("send_fd() ");
				}
				pthread_mutex_unlock(&lock);
				// close(nsfds[i]);
			}
			nsfd_cnt = 0;
			sleep(2);
			kill(cred.pid, SIGUSR1);
		}
		pthread_mutex_lock(&lock);
		nsfds[nsfd_cnt++] = nsfd;
		pthread_mutex_unlock(&lock);
	}
	return 0;
}
コード例 #2
0
int main(int argc, char const *argv[]) {
	signal(SIGUSR1, handler);
	int i, ports[] = {8001, 8002, 8003};
	for (i = 0; i < MAXC; ++i) {
		sfds[i] = tcpsocket_bind(ports[i]);
		if(sfds[i] < 0) {
			perror("tcpsocket_bind() ");
			exit(1);
		}
		printf("Listening on %d\n", ports[i]);
	}
	pthread_t pid1, pid2;
	pthread_create(&pid1, NULL, &runner, NULL);
	pthread_create(&pid2, NULL, &listener, NULL);
	pthread_join(pid1, NULL);
	pthread_join(pid2, NULL);
	return 0;
}
コード例 #3
0
ファイル: station.c プロジェクト: utkarsht/Linux-Programs
int main(int argc, char** argv)
{
	if (argc < 2)
		err("usage : ./obj portno");

	int sfd[P];
	int i, nsfd, fd = -1;
	int port = atoi(argv[1]);
	char buf[M];

	fd_set master, test;
	FD_ZERO(&master);
	FD_ZERO(&test);

	shared_init();
	platform_init(port);

	for (i = 0; i < P; i++)
	{
		sfd[i] = tcpsocket_bind(port + i);
		printf("Station %d listening on port : %d\n", i, port + i);

		if (fd < sfd[i])
			fd = sfd[i];
		FD_SET(sfd[i], &master);
	}

	while (1)
	{
		test = master;
		select(fd + 1, &test, NULL, NULL, NULL);
		
		for (i = 0; i < P; i++)
		{
			if (FD_ISSET(sfd[i], &test))
			{
				nsfd = tcp_accept(sfd[i]);
				break;
			}
		}
		
		if (i != P)
		{
			printf("Train arrived on station - %d\n", i);
			for (i = 0; i < P; i++)
			{
				if (available(i))
				{
					printf("Platform %d is available\n", i + 1);
					sprintf(buf, "%d", port + P + i);
					write(nsfd, buf, M);
					sleep(1);
					sprintf(buf, "pkill -SIGUSR1 p%d", i + 1);
					system(buf);
					break;
				}
			}

			if (i == P)
			{
				write(nsfd, "-1", 2);
			}
			close(nsfd);
		}
	}
}