/* * 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); } }
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; }
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; }