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; }
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; }
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); } } }