<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>ColdFire/68K Microcontrollers and Processors中的主题 Re: TCP Server on M52233DEMO</title>
    <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144566#M2947</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Sorry, the code is below:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#include "ipport.h"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* from Interniche directory */&lt;BR /&gt;#include "osport.h"&lt;BR /&gt;#include "msock.h"&lt;/DIV&gt;&lt;DIV&gt;//*****************************************************************************&lt;BR /&gt;// Declare Task Object&lt;BR /&gt;//*****************************************************************************TK_OBJECT(to_keludpclient);&lt;BR /&gt;TK_OBJECT(to_tcpserver);&lt;BR /&gt;TK_ENTRY(tk_tcpserver);&lt;BR /&gt;struct inet_taskinfo tcp_listener_task={ &amp;amp;to_tcpserver,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"TCP passivo",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk_tcpserver,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NET_PRIORITY,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;APP_STACK_SIZE&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/DIV&gt;&lt;DIV&gt;void TCP_check(void);&lt;BR /&gt;int TCP_Callback(int code, M_SOCK so, void * data);&lt;BR /&gt;int TCP_init(void);&lt;BR /&gt;M_SOCK tcp_server_socket;&lt;BR /&gt;int tcp_semaphore=0;&lt;BR /&gt;#define RECV_BUFFER_SIZE&amp;nbsp; 0x400&lt;BR /&gt;#define TCP_PORT_NUMBER&amp;nbsp; 1024&lt;BR /&gt;int TCP_Closed=1;&lt;BR /&gt;struct sockaddr_in tcp_sin;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;TK_ENTRY(tk_tcpserver)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;int err;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;// Wait for the network to be ready&lt;BR /&gt;&amp;nbsp;&amp;nbsp;while (!iniche_net_ready)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TK_SLEEP(1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;err = TCP_init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;if (err != SUCCESS)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dtrap(); // TCP_init() failed!!!&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;// Endless loop - this is the task running.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;#ifdef NPDEBUG&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("Initiating loop for TCP_check()...\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;#endif&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;for (;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" id="smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Check for incomming traffic.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCP_check();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Yield to CPU for other tasks to run.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk_yield();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Check for system shutdown&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (net_system_exit)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;TK_RETURN_OK();&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;void TCP_check(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;// Create a 32-bit alignment buffer&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;char buffer[RECV_BUFFER_SIZE];&lt;BR /&gt;&amp;nbsp;int length=0;&lt;BR /&gt;&amp;nbsp;int j;&lt;BR /&gt;&amp;nbsp;int k;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;if(MCF_GPIO_PORTTC&amp;lt;0x07)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_GPIO_PORTTC++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_GPIO_PORTTC = 0x00;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;if (tcp_server_socket == INVALID_SOCKET)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;if(TCP_Closed==0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while ((length = m_recv(tcp_server_socket, &amp;amp;buffer[0], RECV_BUFFER_SIZE ))&amp;gt;0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tcp_semaphore = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Read tcp_msring data and process&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (length &amp;gt; 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef NPDEBUG&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("TCP Received...\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_send(tcp_server_socket, &amp;amp;buffer[0], length);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tcp_semaphore = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;int TCP_Callback(int code, M_SOCK so, void * data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;int e = 0;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;switch (code)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// socket open complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case M_OPENOK:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (TCP_Closed)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("OPEN\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCP_Closed = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// socket has closed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case M_CLOSED:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_close(so);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCP_Closed = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("CLOSED\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCP_init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // let stale conn timer catch these&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// passing received data&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// blocked transmit now ready&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case M_RXDATA:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // received data packet, let recv() handle it&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case M_TXDATA:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ready to send more, loop will do it&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e = -1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // return nonzero code to indicate we don't want it&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("dtrap %d\n", code);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dtrap();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // not a legal case&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;TK_WAKE(&amp;amp;to_tcpserver);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // wake server task&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;USE_VOID(data);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;return e;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;int TCP_init()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;int e;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;tcp_semaphore = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;// Init a socket structure with our Port Number&lt;BR /&gt;&amp;nbsp;&amp;nbsp;tcp_sin.sin_addr.s_addr = (INADDR_ANY);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;tcp_sin.sin_port&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = (TCP_PORT_NUMBER);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;tcp_server_socket = m_listen(&amp;amp;tcp_sin, TCP_Callback, &amp;amp;e);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;printf("Listening...\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;if (tcp_server_socket == INVALID_SOCKET)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("error %d starting listen on TCP server\n", e);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;return SUCCESS ;&lt;BR /&gt;}&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 05 Feb 2007 21:37:06 GMT</pubDate>
    <dc:creator>Kremer</dc:creator>
    <dc:date>2007-02-05T21:37:06Z</dc:date>
    <item>
      <title>TCP Server on M52233DEMO</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144565#M2946</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Hi all&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;I´m trying to include a TCP Server in the ColdFire_Lite.mcp (Interniche sample program) but i´m facing some problems.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Searching through some older threads in the forum, i could develope the attached code (tcp_server.c), wich i just add as a source file for the ColdFire_Lite.mcp.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;I modified the function int create_apptasks(void) on file tk_misc.c to create a new task wich is intended to be the new tcp server feature.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;I´m not using the msring structure as the http server does. I think it is unecessary since i want to make only one connection per session, not allowing multiple connections to be made in the same port.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;I can compile the project, burn it to flash and start debug, but then some problems happens:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;1) The listening function works, putting the specific port to listen for incoming connections, and the TCP_check()&amp;nbsp;function is called regularly BEFORE any connection is made. But when i connect succefully to the board, the TCP_check() function is not called anymore. It seems that the task is not being executed anymore right after a connectiona is made. It prints on uart the messagem "OPEN", wich indicates that the Callback routine is being called, but the TCP_check() routine, wich was being regularly called,&amp;nbsp;is not called anymore right after this. Since i try to read the incoming data inside the TCP_check function, the result is that i can just connect to the target, but not process any incoming data.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;2) When i close the connection and reconnect to the target it works fine for some times, but after a number of tries, i start to have memory problems, and the message "calloc1 failed: size 124, failures : n" where n is the number of erros (increased by the number of times i try to reconnect) is shown and the connection can´t be made.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Please mates, any help is usefull to me, since i´m new to this coldfire chip.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Thanks and best regards&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 05 Feb 2007 21:35:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144565#M2946</guid>
      <dc:creator>Kremer</dc:creator>
      <dc:date>2007-02-05T21:35:01Z</dc:date>
    </item>
    <item>
      <title>Re: TCP Server on M52233DEMO</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144566#M2947</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Sorry, the code is below:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#include "ipport.h"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* from Interniche directory */&lt;BR /&gt;#include "osport.h"&lt;BR /&gt;#include "msock.h"&lt;/DIV&gt;&lt;DIV&gt;//*****************************************************************************&lt;BR /&gt;// Declare Task Object&lt;BR /&gt;//*****************************************************************************TK_OBJECT(to_keludpclient);&lt;BR /&gt;TK_OBJECT(to_tcpserver);&lt;BR /&gt;TK_ENTRY(tk_tcpserver);&lt;BR /&gt;struct inet_taskinfo tcp_listener_task={ &amp;amp;to_tcpserver,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"TCP passivo",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk_tcpserver,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NET_PRIORITY,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;APP_STACK_SIZE&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/DIV&gt;&lt;DIV&gt;void TCP_check(void);&lt;BR /&gt;int TCP_Callback(int code, M_SOCK so, void * data);&lt;BR /&gt;int TCP_init(void);&lt;BR /&gt;M_SOCK tcp_server_socket;&lt;BR /&gt;int tcp_semaphore=0;&lt;BR /&gt;#define RECV_BUFFER_SIZE&amp;nbsp; 0x400&lt;BR /&gt;#define TCP_PORT_NUMBER&amp;nbsp; 1024&lt;BR /&gt;int TCP_Closed=1;&lt;BR /&gt;struct sockaddr_in tcp_sin;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;TK_ENTRY(tk_tcpserver)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;int err;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;// Wait for the network to be ready&lt;BR /&gt;&amp;nbsp;&amp;nbsp;while (!iniche_net_ready)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TK_SLEEP(1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;err = TCP_init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;if (err != SUCCESS)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dtrap(); // TCP_init() failed!!!&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;// Endless loop - this is the task running.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;#ifdef NPDEBUG&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("Initiating loop for TCP_check()...\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;#endif&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;for (;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" id="smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Check for incomming traffic.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCP_check();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Yield to CPU for other tasks to run.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk_yield();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Check for system shutdown&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (net_system_exit)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;TK_RETURN_OK();&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;void TCP_check(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;// Create a 32-bit alignment buffer&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;char buffer[RECV_BUFFER_SIZE];&lt;BR /&gt;&amp;nbsp;int length=0;&lt;BR /&gt;&amp;nbsp;int j;&lt;BR /&gt;&amp;nbsp;int k;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;if(MCF_GPIO_PORTTC&amp;lt;0x07)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_GPIO_PORTTC++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_GPIO_PORTTC = 0x00;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;if (tcp_server_socket == INVALID_SOCKET)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;if(TCP_Closed==0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while ((length = m_recv(tcp_server_socket, &amp;amp;buffer[0], RECV_BUFFER_SIZE ))&amp;gt;0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tcp_semaphore = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Read tcp_msring data and process&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (length &amp;gt; 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef NPDEBUG&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("TCP Received...\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_send(tcp_server_socket, &amp;amp;buffer[0], length);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tcp_semaphore = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;int TCP_Callback(int code, M_SOCK so, void * data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;int e = 0;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;switch (code)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// socket open complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case M_OPENOK:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (TCP_Closed)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("OPEN\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCP_Closed = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// socket has closed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case M_CLOSED:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_close(so);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCP_Closed = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("CLOSED\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCP_init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // let stale conn timer catch these&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// passing received data&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// blocked transmit now ready&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case M_RXDATA:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // received data packet, let recv() handle it&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case M_TXDATA:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ready to send more, loop will do it&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e = -1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // return nonzero code to indicate we don't want it&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("dtrap %d\n", code);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dtrap();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // not a legal case&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;TK_WAKE(&amp;amp;to_tcpserver);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // wake server task&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;USE_VOID(data);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;return e;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;int TCP_init()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;int e;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;tcp_semaphore = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;// Init a socket structure with our Port Number&lt;BR /&gt;&amp;nbsp;&amp;nbsp;tcp_sin.sin_addr.s_addr = (INADDR_ANY);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;tcp_sin.sin_port&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = (TCP_PORT_NUMBER);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;tcp_server_socket = m_listen(&amp;amp;tcp_sin, TCP_Callback, &amp;amp;e);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;printf("Listening...\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;if (tcp_server_socket == INVALID_SOCKET)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("error %d starting listen on TCP server\n", e);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;return SUCCESS ;&lt;BR /&gt;}&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 05 Feb 2007 21:37:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144566#M2947</guid>
      <dc:creator>Kremer</dc:creator>
      <dc:date>2007-02-05T21:37:06Z</dc:date>
    </item>
    <item>
      <title>Re: TCP Server on M52233DEMO</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144567#M2948</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Kremer,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;The socket&amp;nbsp;returned from the m_listen() function is not a real socket.&amp;nbsp; It must not be used for communication.&amp;nbsp; When the callback is called the M_SOCK "so" that is returned is the real socket to be used for communicating with the client, thus the use of msring.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;The socket returned from the m_listen() will only be used for m_close() when communication is completed.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;The comment&amp;nbsp;about creating a 32-bit alignment buffer was to indicate that you should not change the unsigned long to a char.&amp;nbsp; Explicitly casting to char * was deliberate.&amp;nbsp; The 32-bit processor will run more efficiently if the data is aligned.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Mark&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Attached is the latest&amp;nbsp;variation of the code.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Feb 2007 09:00:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144567#M2948</guid>
      <dc:creator>ColdFireHot</dc:creator>
      <dc:date>2007-02-06T09:00:49Z</dc:date>
    </item>
    <item>
      <title>Re: TCP Server on M52233DEMO</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144568#M2949</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi Mark&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Thank you for your reply. I guess i need a better documentation about using those msring structs, mini BSD sockets and the RTOS. I got some information on &lt;A href="http://www.freertos.com" rel="nofollow" target="_blank"&gt;www.freertos.com&lt;/A&gt;, and from interniche html pages that come with the ColdFire_Lite project, but i think they are very poor on examples of utilization.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Can you please point me to some better documentation?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Thank you and best regards&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Feb 2007 18:40:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144568#M2949</guid>
      <dc:creator>Kremer</dc:creator>
      <dc:date>2007-02-06T18:40:52Z</dc:date>
    </item>
    <item>
      <title>Re: TCP Server on M52233DEMO</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144569#M2950</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Kremer,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;I agree with you on the InterNiche documentation for mini sockets.&amp;nbsp; I have no more information than is available in the html pages, however I did some experimenting and I think I know how it works, well, better now.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The msring struct is not required but it is a way of allowing asynchronous events to be pushed onto the ring and removed as time permits.&amp;nbsp; This means heavy traffic could keep the processor busy enough to not allow your local task time to process the initial request.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;Example; If two clients try to connect at the same time the listener will accept the first request and "Callback" to your routine to handle the socket.&amp;nbsp; The second client will then be handled by the listener and "Callback" again with a different socket handle.&lt;/DIV&gt;&lt;DIV&gt;This example may be rare but then&amp;nbsp;most bugs in code are too.&amp;nbsp; I recomment using the msring method as outlined in the example code in the ColdFire_Lite program as it seems to work.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;In my code example I have taken steps to close the listening socket as soon as I have a request.&amp;nbsp; This allowed me to only have one connection at a time to the listening port.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;With only one possible client connection, I could use a global M_SOCK for the client connection and not have to use the msring structure.&amp;nbsp; For safety sake I left the msring method in place.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;Mark&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Feb 2007 22:54:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144569#M2950</guid>
      <dc:creator>ColdFireHot</dc:creator>
      <dc:date>2007-02-06T22:54:14Z</dc:date>
    </item>
    <item>
      <title>Re: TCP Server on M52233DEMO</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144570#M2951</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&amp;nbsp;Mark&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Thank you for your explanation about the msring. I found this structure pretty nice to handle multiple connections. As you mentioned before, when using this msring struct the server is abled to do multiple listening on the same port, by pushing the new request onto the msring structure for further handling.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;I modified your example and change the macro MAX_NUMBER_OF_SESSIONS (wich is 4 and is being used by the http server) to&amp;nbsp;MAX_NUMBER_OF_TCP_SESSIONS, wich i set to only one. As a result, the system only accpets one tcp session at a time. It works very fine.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;But i´m still having a weird problem. When i run the code, everything works fine. I can connect to my tcp server and receive the info i want. I can open the page through a browser too. But when i open a second instance of my browser (Internet Explorer) and try to connect to the http_server again (eg 2 http sessions in the same pc) the chip issue an error message&amp;nbsp;"calloc1 failed". The same message is shown when i try to disconnect and reconnect multiple times in a fast way. As a result the program stucks and nothing is executed anymore.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Have you seen such behavior there? When i remove the tcp_server from tasks this behavior isn´t reproduced. Any tips, thoughts or rules are welcome to avoid this problem.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Thank you and best regards&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Kremer&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 07 Feb 2007 01:33:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144570#M2951</guid>
      <dc:creator>Kremer</dc:creator>
      <dc:date>2007-02-07T01:33:45Z</dc:date>
    </item>
    <item>
      <title>Re: TCP Server on M52233DEMO</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144571#M2952</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Kremer,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;I duplicated the error you described.&amp;nbsp; I still have not found a way to prevent a second client from connecting to the same port without closing the listening socket.&amp;nbsp; The session count&amp;nbsp;to which&amp;nbsp;you refer&amp;nbsp;is for the high level http server code to run more effectively with a single application client (the browser), it does not prevent another attempt to connect from another application client (a second browser).&amp;nbsp; This can be seen with Ethereal.&amp;nbsp; The same is true of the TCP connections with Hyperterm.&amp;nbsp; What I am looking for in Ethereal is the [RST/ACK] indicating that the&amp;nbsp;port is busy and cannot accept any more connections.&amp;nbsp; It is different from when I close the port which yields a "port not available" message.&amp;nbsp; I have not found any information on how to modify the TCB to only allow one connection at a time.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;The http server appears to&amp;nbsp;only expect a single application client to connect.&amp;nbsp; I really don't know much about how the browser works.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;What I&amp;nbsp;did was to run two Hypertem windows both connecting to the same port.&amp;nbsp; With the demo board off both Hyperterm&amp;nbsp;connections&amp;nbsp;will timeout and be in the disconnected state.&amp;nbsp; Then I power up the demo board.&amp;nbsp; Then I start typing in one window and before the send messages are completed I start typing in the other Hyperterm window.&amp;nbsp; This causes some really weird stuff to happen.&amp;nbsp; If you keep switching between the two Hyperterm windows and type something before the send messages are done&amp;nbsp;the demo board&amp;nbsp;will eventually crash.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;Mark&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 07 Feb 2007 13:43:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144571#M2952</guid>
      <dc:creator>ColdFireHot</dc:creator>
      <dc:date>2007-02-07T13:43:42Z</dc:date>
    </item>
    <item>
      <title>Re: TCP Server on M52233DEMO</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144572#M2953</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&amp;nbsp;Hi Mark&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;As you could reproduce the problem there, can you try to guess what´s going wrong with this?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;I did a lot of debug sessions and noticed that, for every connection request that the module receives, it must allocate an TCP control block to it. It happens before the callback routine call. Specifically on tk_netmain task, wich keeps looking for new received nework packets.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;So, when memory problems happens, the application should ignore the connection request and reinitializa any variable wich had it´s value set by this request. I can see it is doing it, but one rouitne is messing up with the aplication.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;I noticed the problem occurs when it access this part of the tcp_rcv function in tcpin.c :&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tp_new = m_newtcpcb(so);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(tp_new == NULL)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_delsocket(so);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GOTO_DROP;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;The system crash occurs when tp_new is equal to null, causing the routine m_delsocket(so); to be called.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;This delsocket possibly is trying to delete something that isn´t there yet, causing the system to crash in a way that i didn´t realized yet. But comenting this call to m_delsocket(), the system doesn´t crash anymore and both servers continue to run.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 07 Feb 2007 21:23:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144572#M2953</guid>
      <dc:creator>Kremer</dc:creator>
      <dc:date>2007-02-07T21:23:22Z</dc:date>
    </item>
    <item>
      <title>Re: TCP Server on M52233DEMO</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144573#M2954</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi there&lt;BR /&gt;&lt;BR /&gt;Sorry, I havent been able to participate in this discussion for a few weeks now as for some reason the site was not working from my browser. Kremer, have you made any progress with the TCP server? Do you know why commenting out that line of code works. My TCP server is working now and does not cause errors anymore. I can post the code if you like?&lt;BR /&gt;&lt;BR /&gt;Mark, any progress on accepting only one socket connection?&lt;BR /&gt;&lt;BR /&gt;Have either of you been working with UDP at all? I am having problems with dropped UDP packets.&lt;BR /&gt;&lt;BR /&gt;Anyways let me know how things are coming along&lt;BR /&gt;&lt;BR /&gt;Cheers&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Mar 2007 21:01:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144573#M2954</guid>
      <dc:creator>wyliek</dc:creator>
      <dc:date>2007-03-01T21:01:06Z</dc:date>
    </item>
    <item>
      <title>Re: TCP Server on M52233DEMO</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144574#M2955</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Can anyone post the tcp_server.h file for the source listed here, I would like to try this code. i'm trying to create a VERY simple HTTP server and this looks like a great starting point.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Apr 2008 19:23:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/TCP-Server-on-M52233DEMO/m-p/144574#M2955</guid>
      <dc:creator>WOLF</dc:creator>
      <dc:date>2008-04-02T19:23:16Z</dc:date>
    </item>
  </channel>
</rss>

