/*
* init_server()
*   Starts up listening socket
*/
int init_server()
{
	int on = 1;
	
	// Communications sockets
	
	if (ENABLE_VB) {
		// tcp:
		gs_coms_skt = tcpsock();  
		if (setsockopt(gs_coms_skt, SOL_SOCKET,SO_REUSEADDR, (char*)&on, sizeof(on)) < 0) {
			printf("Error Reusing Socket\n");
		}	
		sockbind(gs_coms_skt, gs_port_coms);
		socklisten(gs_coms_skt);
		printf("TCP Listening on port %d\n.",gs_port_coms);
		sock_set_nonblocking(gs_coms_skt);  // was blocking
	}
	
	// udp: 
	if (firsttime) {
		gs_udpcoms_skt = udpsock();
		sock_set_nonblocking(gs_udpcoms_skt);      
		sockbind(gs_udpcoms_skt, UDP_PORT);
		printf("UDP Listening on port %d\n.", UDP_PORT);
	}
}
Esempio n. 2
0
int tls_start(tls_t *tls)
{
    sock_set_blocking(tls->sock);
    tls->lasterror = gnutls_handshake(tls->session);
    sock_set_nonblocking(tls->sock);

    return tls->lasterror == GNUTLS_E_SUCCESS;
}
Esempio n. 3
0
sock_t sock_connect(const char * const host, const unsigned int port)
{
    sock_t sock;
    char service[6];
    struct addrinfo *res, *ainfo, hints;
    int err;
    
    sock = -1;

    snprintf(service, 6, "%u", port);

    memset(&hints, 0, sizeof(struct addrinfo));
    hints.ai_family = AF_INET;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_socktype = SOCK_STREAM;

    if ((err = getaddrinfo(host, service, &hints, &res)) != 0)
	return -1;

    ainfo = res;
    while (ainfo) {
	if ((sock = socket(ainfo->ai_family, ainfo->ai_socktype, 
		   ainfo->ai_protocol)) >= 0) {
	    sock_set_nonblocking(sock);

	    err = connect(sock, ainfo->ai_addr, ainfo->ai_addrlen);

	    if ((err == 0) || (err < 0 && _in_progress(sock_error())))
		break;
	}

	ainfo = ainfo->ai_next;
    }

    if (res) freeaddrinfo(res);

    return sock;
}
int run_client()
{
	int i = 0;
	int j = 0;
	//long boolean = -1; // run while loop while this is true
	//int valid = 0; // indicates whether the last packet recv'd is valid
	static struct sockaddr_in cliaddr;
	unsigned int len = sizeof(cliaddr);
	int mem_counter = 0;
	
	/*unsigned long valid_ot = 0;
	unsigned long valid_ip0 = 0;
	unsigned long valid_ip1 = 0;
	unsigned long valid_ip2 = 0;
	unsigned long valid_ot_prev = 0;
	unsigned long valid_ip0_prev = 0;
	unsigned long valid_ip1_prev = 0;
	unsigned long valid_ip2_prev = 0;
	unsigned char printstat = 0;
	unsigned char printstat_prev = 0;*/

	sigset_t sigio_set; 
	struct sigaction saio;           // definition of signal action 
	static struct sockaddr_in addr;  

	// Accept new connection
/*	if (tcpip_connected == 0) {
		accepted_skt = connaccept(gs_coms_skt, &addr);
		if (accepted_skt > 0) {
			// We don't wanna block either source
			sock_set_nonblocking(accepted_skt);
			int flags = fcntl(accepted_skt, F_GETFL,0);
			fcntl (accepted_skt,F_SETFL,flags|FASYNC);
			fcntl(accepted_skt, F_SETOWN, getpid());

			sigemptyset(&sigio_set);
			sigaddset(&sigio_set,SIGIO); 
			saio.sa_handler = sd_signal_handler_IO;
			saio.sa_flags = SA_SIGINFO;
			sigemptyset(&saio.sa_mask);
			saio.sa_mask = sigio_set;
			if (sigaction(SIGIO,&saio,NULL)) {
				printf("Error in sigaction()\n");
				return 1;
			}

			if (accepted_skt>0) {
				printf("Connection accepted from %d.%d.%d.%d\n",
				(addr.sin_addr.s_addr&0x000000ff),      
				(addr.sin_addr.s_addr&0x0000ff00)>>8,
				(addr.sin_addr.s_addr&0x00ff0000)>>16,
				(addr.sin_addr.s_addr&0xff000000)>>24);
			}
			printf(".\n");
			tcpip_connected = 1;
		}
	}*/
	while (!gs_quit) {
		sched_yield();
		
		// Accept new connection
		if ((tcpip_connected == 0) && (ENABLE_VB)) {
			accepted_skt = connaccept(gs_coms_skt, &addr);
			if (accepted_skt > 0) {
				// We don't wanna block either source
				sock_set_nonblocking(accepted_skt);
				int flags = fcntl(accepted_skt, F_GETFL,0);
				fcntl (accepted_skt,F_SETFL,flags|FASYNC);
				fcntl(accepted_skt, F_SETOWN, getpid());

				sigemptyset(&sigio_set);
				sigaddset(&sigio_set,SIGIO); 
				saio.sa_handler = sd_signal_handler_IO;
				saio.sa_flags = SA_SIGINFO;
				sigemptyset(&saio.sa_mask);
				saio.sa_mask = sigio_set;
				if (sigaction(SIGIO,&saio,NULL)) {
					printf("Error in sigaction()\n");
					return 1;
				}

				if (accepted_skt>0) {
					printf("Connection accepted from %d.%d.%d.%d\n",
					(addr.sin_addr.s_addr&0x000000ff),      
					(addr.sin_addr.s_addr&0x0000ff00)>>8,
					(addr.sin_addr.s_addr&0x00ff0000)>>16,
					(addr.sin_addr.s_addr&0xff000000)>>24);
				}
				printf(".\n");
				tcpip_connected = 1;
			}