Tool/software: TI-RTOS
Hi,
I am using the DK-TM4C129 and TI RTOS and NDK for web server app. I started out using tcpecho and I was able to make it work.
I modified the tcpecho code as shown below and I was able to make it work with the web server task created dynamically. However, when I tried to do it static using a semaphore_post on the hook and semaphore_pend on the web_server_task, I keep on getting an error. The socket function returns a -1.
{
Task_Handle taskHandle;
Task_Params taskParams;
Error_Block eb;
Error_init(&eb);
* Create the Task that farms out incoming TCP connections.
* arg0 will be the port that this task listens to.
*/
Task_Params_init(&taskParams);
taskParams.stackSize = 1024;
taskParams.priority = 1;
//taskParams.arg0 = TCPPORT;
taskHandle = Task_create((Task_FuncPtr)web_server_task, &taskParams, &eb);
if (taskHandle == NULL) {
System_printf("netOpenHook: Failed to create tcpHandler Task\n");
}
}//end void enet_open_hook(void)
/***********************************************/
void web_server_task(void)
{
uint8_t val_array[10];
int bytesRcvd;
int bytesSent;
char buffer[256];
int clientfd;
int status;
int optval;
int optlen = sizeof(optval);
struct sockaddr_in localAddr;
struct sockaddr_in clientAddr;
socklen_t addrlen = sizeof(clientAddr);
write_UART("\n\n\rRunning web server task...");
write_UART("\n\rServer socket = ");
long_to_ascii(server, val_array);
write_UART(val_array);
{
write_UART("\n\rMaster socket failed");
}
localAddr.sin_family = AF_INET;
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
localAddr.sin_port = htons(80);
if (status < 0)
{
write_UART("\n\rError bind");
}
if (status < 0)
{
write_UART("\n\rError listen");
}
if (setsockopt(server, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen) < 0)
{
write_UART("\n\rError setsockopt");
}
while ((clientfd = accept(server, (struct sockaddr *)&clientAddr, &addrlen)) != -1)
{
write_UART("\n\rClientfd socket = ");
long_to_ascii(clientfd, val_array);
write_UART(val_array);
{
bytesSent = send(clientfd, buffer, bytesRcvd, 0);
if (bytesSent < 0 || bytesSent != bytesRcvd)
{
write_UART("\n\rError byte send/rcv");
}
}
}//end while(1)
}//end void web_server_task(void)
{
}//end void enet_open_hook(void)
/***********************************************/
void web_server_task(void)
{
uint8_t val_array[10];
int bytesRcvd;
int bytesSent;
char buffer[256];
int clientfd;
int status;
int optval;
int optlen = sizeof(optval);
struct sockaddr_in localAddr;
struct sockaddr_in clientAddr;
socklen_t addrlen = sizeof(clientAddr);
write_UART("\n\n\rRunning web server task...");
write_UART("\n\rServer socket = ");
long_to_ascii(server, val_array);
write_UART(val_array);
{
write_UART("\n\rMaster socket failed");
}
localAddr.sin_family = AF_INET;
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
localAddr.sin_port = htons(80);
if (status < 0)
{
write_UART("\n\rError bind");
}
if (status < 0)
{
write_UART("\n\rError listen");
}
if (setsockopt(server, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen) < 0)
{
write_UART("\n\rError setsockopt");
}
while ((clientfd = accept(server, (struct sockaddr *)&clientAddr, &addrlen)) != -1)
{
write_UART("\n\rClientfd socket = ");
long_to_ascii(clientfd, val_array);
write_UART(val_array);
{
bytesSent = send(clientfd, buffer, bytesRcvd, 0);
if (bytesSent < 0 || bytesSent != bytesRcvd)
{
write_UART("\n\rError byte send/rcv");
}
}
}//end while(1)
}//end void web_server_task(void)