/* * Server Task */ static rtems_task serverTask(rtems_task_argument arg) { int s, s1; socklen_t addrlen; struct sockaddr_in myAddr, farAddr; rtems_task_priority myPriority; printf("Create socket.\n"); s = socket(AF_INET, SOCK_STREAM, 0); if (s < 0) rtems_panic("Can't create socket: %s\n", strerror(errno)); memset(&myAddr, 0, sizeof myAddr); myAddr.sin_family = AF_INET; myAddr.sin_port = htons(1234); myAddr.sin_addr.s_addr = htonl(INADDR_ANY); printf("Bind socket.\n"); if (bind(s, (struct sockaddr *)&myAddr, sizeof myAddr) < 0) rtems_panic("Can't bind socket: %s\n", strerror(errno)); if (listen(s, 5) < 0) printf("Can't listen on socket: %s\n", strerror(errno)); rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &myPriority); for(;;) { addrlen = sizeof farAddr; s1 = accept(s, (struct sockaddr *)&farAddr, &addrlen); if (s1 < 0) if (errno == ENXIO) rtems_task_delete(RTEMS_SELF); else rtems_panic("Can't accept connection: %s", strerror(errno)); else printf("ACCEPTED:%lX\n", ntohl(farAddr.sin_addr.s_addr)); spawnTask(workerTask, myPriority, s1); } }
int main() { /* Initialize the task library */ initTasks(); /* Spawn Tasks */ /* WCET, period, deadline, phase= 0 */ spawnTask (&task0, 4000,800, 7,0); spawnTask (&task1, 4000,750, 21,0); spawnTask (&task2, 4000,1600,5,0); spawnTask (&task3, 4000,1000,25,0); spawnTask (&task4, 4000,600,16,0); spawnTask (&task5, 4000,1200,10,0); spawnTask (&task6, 3900,1100,27,0); spawnTask (&task7, 4000,1600,20,0); spawnTask (&idletask, 0,0,0,0); /* start scheduling and running the tasks */ Start(); return 0; }
/* * RTEMS Startup Task */ rtems_task Init (rtems_task_argument ignored) { rtems_status_code sc; rtems_print_printer_printf(&rtems_test_printer); rtems_test_begin(); sc = rtems_semaphore_create(rtems_build_name('P','m','t','x'), 1, RTEMS_PRIORITY|RTEMS_BINARY_SEMAPHORE|RTEMS_INHERIT_PRIORITY| RTEMS_NO_PRIORITY_CEILING|RTEMS_LOCAL, 0, &printMutex); if (sc != RTEMS_SUCCESSFUL) rtems_panic("Can't create printf mutex:", rtems_status_text(sc)); printf("\"Network\" initializing!\n"); rtems_bsdnet_initialize_network(); printf("\"Network\" initialized!\n"); printf("Try running client with no server present.\n"); printf("Should fail with `connection refused'.\n"); clientWorker(0); printf("\nStart server.\n"); spawnTask(serverTask, 150, 0); printf("\nTry running client with server present.\n"); spawnTask(clientTask, 120, 1); rtems_task_wake_after(500); printf("\nTry running two clients.\n"); spawnTask(clientTask, 120, 2); spawnTask(clientTask, 120, 3); rtems_task_wake_after(500); printf("\nTry running three clients.\n"); spawnTask(clientTask, 120, 4); spawnTask(clientTask, 120, 5); spawnTask(clientTask, 120, 6); rtems_task_wake_after(500); rtems_test_end(); exit( 0 ); }