|
|
View previous topic :: View next topic |
Author |
Message |
Darren Rook
Joined: 06 Sep 2003 Posts: 287 Location: Milwaukee, WI
|
Microchip TCP/IP Stack Question |
Posted: Tue Oct 07, 2003 3:09 pm |
|
|
This is for the people who have used Microchip's TCP/IP stack. Ok, I have this code:
Code: |
void put_page_machine(char * hostname, int8 * ptr, int16 max, int8 socket) {
enum _put_page_state {PUT_PAGE_WAIT_FOR_TX, PUT_PAGE_WAIT_FOR_RX} put_page_state;
tcpip_ec ret=EC_SOCKET_DISCONNECTED;
//clean / init some variables
TCPDiscard(socket);
put_page_state=PUT_PAGE_WAIT_FOR_TX;
while( (second_counter < (PUT_PAGE_TIMEOUT)) && (TCPIsConnected(socket)) ) {
if (put_page_state==PUT_PAGE_WAIT_FOR_TX) {
if (TCPIsPutReady(socket)) {
//use TCPPut() to put data.
//This routine does not put more data than there is buffer available.
TCPFlush(socket);
StackTask();
put_page_state=PUT_PAGE_WAIT_FOR_RX;
ret=EC_TCPIP_RX_RESPONSE_TIMEOUT;
}
else {StackTask();}
}
else if (put_page_state==PUT_PAGE_WAIT_FOR_RX) {
ret=EC_TCPIP_RX_TIMEOUT;
while ((second_counter < (PUT_PAGE_TIMEOUT))&&(max)&&(!done)) {
if (TCPGet(socket,&c)) {
//Parse and save data.
else {
StackTask();
}
restart_wdt();
}
break;
}
restart_wdt();
}
if (!TCPIsConnected(socket)) {
ret=EC_SOCKET_DISCONNECTED;
}
TCPDiscard(socket);
//return data
}
|
Basically, this function talks to a CGI script on a webserver. This function sends a CGI query, and then gets the answer to the query. The program makes several queries, so it calls this function several times. The socket is opened once, this function is called a few times to make a few queries, and then the socket is closed.
My problem is that the function works 2 or 3 times, then it stops working. What I mean by stops working is that this function sends a query to the CGI script, the CGI script responds but TCPGet() never returns true. I have verified that the CGI script is responding correctly using a packet sniffer.
So, what have I done to break TCPGet() so that is returning false? Or is there possibly a bug in the TCP/IP stack and the packet gets thrown away? Any ideas?
Thanks. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Oct 07, 2003 9:21 pm |
|
|
I haven't done this, but reading AN833, it says that a pre-condition
before calling TCPget() is that a call to TCPisgetready() must return TRUE.
This is from page 55 of AN833:
if ( TCPIsGetReady(httpSocket) )
{
// Fetch data
TCPGet(httpSocket, &dataByte); |
|
|
Darren Rook
Joined: 06 Sep 2003 Posts: 287 Location: Milwaukee, WI
|
|
Posted: Tue Oct 07, 2003 10:16 pm |
|
|
PCM programmer wrote: | I haven't done this, but reading AN833, it says that a pre-condition
before calling TCPget() is that a call to TCPisgetready() must return TRUE.
This is from page 55 of AN833:
|
Have I ever told you that you are amazing?
Anyways, back to the point... I had TCPIsGetReady() in the code but then I removed it because they call TCPIsGetReady() in TCPGet(). After some sleep, I will double check. Thanks. |
|
|
Darren Rook
Joined: 06 Sep 2003 Posts: 287 Location: Milwaukee, WI
|
|
Posted: Wed Oct 08, 2003 11:58 am |
|
|
PCM programmer wrote: | I haven't done this, but reading AN833, it says that a pre-condition
before calling TCPget() is that a call to TCPisgetready() must return TRUE.
|
Unfortunately, I was correct last night in the TCPGet() checks TCPIsGetReady() beforehand so this is not my problem. (I originally did check TCPISGetReady() before using TCPGet(), but took it out to save space when I saw that TCPGet() was doing this already).
It looks like there is a bug in the TCP/IP stack (either a compiler bug or bug in the actual stack) in that the socket loses connection after a certain time.
I will have to track down the guy who wrote the stack to see what he says.
Anyone else have any ideas? |
|
|
murad772
Joined: 30 Oct 2010 Posts: 5
|
|
Posted: Mon Nov 15, 2010 2:14 am |
|
|
How can this function be called?
And can it used with php script? |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|