void destiny_socket_print_sockets(void) { int i; printf("\n--- Socket list: ---\n"); for (i = 1; i < MAX_SOCKETS + 1; i++) { if (get_socket(i) != NULL) { print_internal_socket(get_socket(i)); } } }
void init_tcp_server(void) { sockaddr6_t stSockAddr; int read_bytes; char buff_msg[MAX_TCP_BUFFER]; memset(buff_msg, 0, MAX_TCP_BUFFER); int SocketFD = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP); if(-1 == SocketFD) { perror("can not create socket"); exit(EXIT_FAILURE); } memset(&stSockAddr, 0, sizeof(stSockAddr)); stSockAddr.sin6_family = AF_INET6; stSockAddr.sin6_port = HTONS(1100); ipv6_init_address(&stSockAddr.sin6_addr, 0xabcd, 0x0, 0x0, 0x0, 0x3612, 0x00ff, 0xfe00, get_radio_address()); ipv6_print_addr(&stSockAddr.sin6_addr); if(-1 == bind(SocketFD, &stSockAddr, sizeof(stSockAddr))) { printf("error bind failed\n"); close(SocketFD); return; } print_internal_socket(getSocket(SocketFD)); if(-1 == listen(SocketFD, 10)) { printf("error listen failed\n"); close(SocketFD); return; } while (1) { read_bytes = 0; printf("INFO: WAITING FOR INC CONNECTIONS!\n"); int ConnectFD = accept(SocketFD, NULL, 0); if(0 > ConnectFD) { printf("error accept failed\n"); close(SocketFD); return; } else { printf("Connection established on socket %u.\n", ConnectFD); if (running_recv_threads == 0) { recv_socket_id1 = ConnectFD; thread_create(recv_from_tcp_thread_stack1, RECV_FROM_TCP_THREAD_STACK_SIZE1, PRIORITY_MAIN, CREATE_STACKTEST, recv_from_tcp_thread1, "recv_from_tcp_thread1"); } else if (running_recv_threads == 1) { recv_socket_id2 = ConnectFD; thread_create(recv_from_tcp_thread_stack2, RECV_FROM_TCP_THREAD_STACK_SIZE2, PRIORITY_MAIN, CREATE_STACKTEST, recv_from_tcp_thread2, "recv_from_tcp_thread2"); } running_recv_threads++; } } }
void init_tcp_server(void) { sockaddr6_t stSockAddr; int read_bytes; char buff_msg[MAX_TCP_BUFFER]; int16_t a; transceiver_command_t tcmd; msg_t mesg; memset(buff_msg, 0, MAX_TCP_BUFFER); int SocketFD = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP); if(-1 == SocketFD) { perror("can not create socket"); exit(EXIT_FAILURE); } memset(&stSockAddr, 0, sizeof(stSockAddr)); stSockAddr.sin6_family = AF_INET6; stSockAddr.sin6_port = HTONS(1100); tcmd.transceivers = TRANSCEIVER_CC1100; mesg.type = GET_ADDRESS; tcmd.data = &a; mesg.content.ptr = (char *) &tcmd; msg_send_receive(&mesg, &mesg, transceiver_pid); ipv6_addr_init(&stSockAddr.sin6_addr, 0xabcd, 0x0, 0x0, 0x0, 0x3612, 0x00ff, 0xfe00, a); print_ipv6_addr(&stSockAddr.sin6_addr); if(-1 == bind(SocketFD, &stSockAddr, sizeof(stSockAddr))) { printf("error bind failed\n"); close(SocketFD); return; } print_internal_socket(getSocket(SocketFD)); if(-1 == listen(SocketFD, 10)) { printf("error listen failed\n"); close(SocketFD); return; } while(1) { read_bytes = 0; printf("INFO: WAITING FOR INC CONNECTIONS!\n"); int ConnectFD = accept(SocketFD, NULL, 0); if(0 > ConnectFD) { printf("error accept failed\n"); close(SocketFD); return; } else { printf("Connection established on socket %u.\n", ConnectFD); if(running_recv_threads == 0) { recv_socket_id1 = ConnectFD; thread_create(recv_from_tcp_thread_stack1, RECV_FROM_TCP_THREAD_STACK_SIZE1, PRIORITY_MAIN, CREATE_STACKTEST, recv_from_tcp_thread1, "recv_from_tcp_thread1"); } else if(running_recv_threads == 1) { recv_socket_id2 = ConnectFD; thread_create(recv_from_tcp_thread_stack2, RECV_FROM_TCP_THREAD_STACK_SIZE2, PRIORITY_MAIN, CREATE_STACKTEST, recv_from_tcp_thread2, "recv_from_tcp_thread2"); } running_recv_threads++; } } }