Problems uploading light sensor readings to cosm

Hi :stuck_out_tongue:
Im currently working on a small project recording light levels throughout the day.
The code im using is the example "cosm client" given in the arduino softwear, The serial monitor reads the light levels however only uploads to cosm for a small period of time (averaging 15 mins) then freezes and no longer uploads any data.

This is the code i am using

#include <SPI.h>
#include <Ethernet.h>

#define APIKEY         "j8MmxE-pFXHE4tSBen9W4QlIWxSSAKxORnR6WTFUZnQzOD0g" // replace your Cosm api key here
#define FEEDID         63400 // replace your feed ID
#define USERAGENT      "Cosm Arduino Example (63400)" // user agent is the project name

byte mac[] = { 
  0x90, 0xA2, 0xDA, 0x0D, 0x2C, 0xEA};

// fill in an available IP address on your network here,
// for manual configuration:
IPAddress ip(79,97,226,29);

// initialize the library instance:
EthernetClient client;

// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
IPAddress server(216,52,233,121);      // numeric IP for api.cosm.com
//char server[] = "api.cosm.com";   // name address for cosm API

unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
boolean lastConnected = false;                 // state of the connection last time through the main loop
const unsigned long postingInterval = 10*1000; //delay between updates to cosm.com




void setup() {
  // start serial port:
  Serial.begin(9600);
 // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // DHCP failed, so use a fixed IP address:
    Ethernet.begin(mac, ip);
    
    
    
  }
}

void loop() {
        
  int sensorReading = analogRead(A0);   
Serial.println(sensorReading);
  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if there's no net connection, but there was one last time
  // through the loop, then stop the client:
  if (!client.connected() && lastConnected) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }

  // if you're not connected, and ten seconds have passed since
  // your last connection, then connect again and send data:
  if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
    sendData(sensorReading);
  }
  // store the state of the connection for next time through
  // the loop:
  lastConnected = client.connected();
}

// this method makes a HTTP connection to the server:
void sendData(int thisData) {
  // if there's a successful connection:
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    // send the HTTP PUT request:
    client.print("PUT /v2/feeds/");
    client.print(FEEDID);
    client.println(".csv HTTP/1.1");
    client.println("Host: api.cosm.com");
    client.print("X-ApiKey: ");
    client.println(APIKEY);
    client.print("User-Agent: ");
    client.println(USERAGENT);
    client.print("Content-Length: ");

    // calculate the length of the sensor reading in bytes:
    // 8 bytes for "sensor1," + number of digits of the data:
    int thisLength = 8 + getLength(thisData);
    client.println(thisLength);

    // last pieces of the HTTP PUT request:
    client.println("Content-Type: text/csv");
    client.println("Connection: close");
    client.println();

    // here's the actual content of the PUT request:
    client.print("sensor1,");
    client.println(thisData);
  
  } 
  else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
   // note the time that the connection was made or attempted:
  lastConnectionTime = millis();
}


// This method calculates the number of digits in the
// sensor reading.  Since each digit of the ASCII decimal
// representation is a byte, the number of digits equals
// the number of bytes:

int getLength(int someValue) {
  // there's at least one byte:
  int digits = 1;
  // continually divide the value by ten, 
  // adding one to the digit count for each
  // time you divide, until you're at 0:
  int dividend = someValue /10;
  while (dividend > 0) {
    dividend = dividend /10;
    digits++;
  }
  // return the number of digits:
  return digits;
}

when i view the serial monitor the following appears

connecting...
HTTP/1.1 200 OK
Date: Wed, 03 Apr 2013 21:08:00 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 0
Connection: close
X-Request-Id: d0017ef4f24290325e7ae58f03f4730f91059da2
Cache-Control: max-age=0
Vary: Accept-Encoding


disconnecting.

This uploads the data to cosm until the serial monitor freezes and says "connecting...."
My internet signal is very good and ive even tryed it using a different internet connection and ip adress
Please help its driving me crazy

If it helps.... I'm seeing the exact same issue. I can upload for anywhere from 10-60 mins. Then it just locks on uploading to COSM. Sometimes I see return code -3 for a couple of uploads before it locks.

I've noticed hitting the reset (or software reset) do nothing . I need to power of my arduino.

I've read some posts that say there is a memory leak in Ethernet.h that was fixed in 1.0.4 but I still see the issue.