Exemple #1
0
/* On idle we spin checking for the terminals. Gives us more responsiveness
   for the polled ports */
void platform_idle(void)
{
	irqflags_t irq = di();
	tty_poll();
	sync_clock();
	irqrestore(irq);
}
Exemple #2
0
int main() {

    //inits
    int sock;
    struct sockaddr_in bind_addr;
    
    //create socket file descriptor( AF_INET = ipv4 address family; SOCK_DGRAM = UDP; 0 = default protocol)
    sock = socket(AF_INET, SOCK_DGRAM, 0);
    
    if(unlikely(sock == -1)) {
        ERROR("ERROR creating socket!");
        exit(EXIT_FAILURE);
    } else {
        printf("Socket created!\n");
    }
    
    //set details for socket to bind
    memset(&bind_addr, '\0', sizeof(bind_addr));
    bind_addr.sin_family = AF_INET;
    bind_addr.sin_addr.s_addr = INADDR_ANY;  //bind to all interfaces
    //htons = host to network byte order, necessary for universal understanding by all machines
    bind_addr.sin_port = htons(PORT);
    
    //bind socket
    if(unlikely(bind(sock, (struct sockaddr *) &bind_addr, sizeof(bind_addr)) < 0)) {
        close_socket(sock);
        ERROR("ERROR binding!\n");
        exit(EXIT_FAILURE);
    } else {
        printf("Bound successfully!\n");
    }
    
    //signal handling to elegantly exit and close socket on ctrl+c
    struct sigaction sa;
    sa.sa_handler = sig_handler;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    sigaction(SIGINT, &sa, NULL);
    
    
    //determine what to do
    while(1) {
        printf("\nReady to receive requests on port %d...\n", PORT);
        struct sockaddr_in addr = {0};
        char buffer[FIXED_BUFFER] = {0};
        receive_packet(&sock, buffer, sizeof(buffer), NULL, &addr);
        if(strcmp(buffer, "sync") == 0) {
            send_packet(&sock, "ready", 5, NULL, &addr);
            int t = 0;
            receive_packet(&sock, &t, sizeof(t), NULL, NULL);
            sync_clock(t, &sock, &addr);
        }
        else {
            printf("Received invalid request...\n");
            send_packet(&sock, HELLO, sizeof(HELLO), NULL, &addr);
        }
    }
    return 0;
}