void server_communication(void)
{
// The family
addrServerTCP.sa_family = AF_INET;
// The Server port: 51000
addrServerTCP.sa_data[0] = Port[0];
addrServerTCP.sa_data[1] = Port[1];
// The Server IP address: 192.168.0.100
addrServerTCP.sa_data[2] = IP_Server[0];
addrServerTCP.sa_data[3] = IP_Server[1];
addrServerTCP.sa_data[4] = IP_Server[2];
addrServerTCP.sa_data[5] = IP_Server[3];
// SET SOCKET PARAMETERS
SOCKETServerTCP = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
memset (&addrServerTCP.sa_data[2], 0, 4); //Why should the mem be zeroed?
// BIND
BIND_TCP = bind(SOCKETServerTCP, &addrServerTCP, sizeof(sockaddr));
while(BIND_TCP < 0)
BIND_TCP = bind(SOCKETServerTCP, &addrServerTCP, sizeof(sockaddr));
// LISTEN FOR CONNECTIONS ON THE SERVER
LISTEN_TCP = listen(SOCKETServerTCP, 1);
// SET SOCKET OPTIONS
short nonBlocking = 0;
unsigned long recvtimeout = 1000;
setsockopt(SOCKETServerTCP, SOL_SOCKET, SOCKOPT_NONBLOCK , &nonBlocking, sizeof(nonBlocking));
setsockopt(SOCKETServerTCP, SOL_SOCKET, SOCKOPT_RECV_TIMEOUT , &recvtimeout, sizeof(recvtimeout));
socklen_t size;
size = sizeof(sockaddr);
// ACCEPT CONNECTION WITH THE CLIENT
SOCKETClientTCP = accept( SOCKETServerTCP, &addrServerTCP, &size );
UARTprintf("SOCKETClientTCP: %i \n", SOCKETClientTCP);
if(SOCKETClientTCP == 0)
UARTprintf("Connection Set\n");
while(SOCKETClientTCP < 0)
{
if(SOCKETClientTCP == -2)
UARTprintf("Connection pending... \n");
SOCKETClientTCP = accept( SOCKETServerTCP, &addrServerTCP, &size );
if(SOCKETClientTCP == 0)
UARTprintf("Connection Set\n");
}
fd_set readfd;
struct timeval timeout;
FD_ZERO( &readfd );
FD_SET( SOCKETClientTCP, &readfd);
timeout.tv_sec = 5;
timeout.tv_usec = 0;
// DETERMEN READINESS FOR R/W OPERATIONS ON THE SOCKET
SELECT_TCP = select(SOCKETClientTCP, &readfd, NULL, NULL, &timeout );
// RECEIVE CONNECTION VERYFICATION FROM CLIENT
RECV_TCP = recv(SOCKETClientTCP, ucRx_Buffer, sizeof(ucRx_Buffer), 0);
// SEND DATA TO CLIENT
SEND_TCP = send(SOCKETClientTCP, (const char*)pcData16, ulDataLength, 0);
closesocket(SOCKETServerTCP);
closesocket(SOCKETClientTCP);
}