Пример #1
0
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));
        }
    }
}
Пример #2
0
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++;
			}
		}
	}
Пример #3
0
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++;
        }
    }
}