title: Can't connect to Xively using Arduino + wifi shield, "ret = -1 No sockets available"
body: <p>Thanks so much for looking guys. I'm just getting started with Arduino wireless sensor projects and I've hit a clue wall.  I'd appreciate any insight or help troubleshooting my project.  </p>
  
  <p>I'm using an Arduino Mega, with the Wifi Shield to attempt to upload 4 channels (all floats) to my Xively feed. I'm using a modified form of the basic tutorial script (code at bottom). I verify and upload successfully. When I run the board, the initial debugging info looks good. When I attempt to do either a put or a get using the Xively client library I get an error (ret = -1, no sockets available, and http error on gets). I've attached a serial log of the errors at the bottom as well.</p>
  
  <p>I've taken some troubleshooting steps already.  I've re-downloaded all the xively libraries, and Wifi libraries to be sure.  I thought manually setting a DNS server (8.8.8.8) might help. I even imported the whole arduino library (although I don't think it should be needed) to get the DNS functionality.  It did not seem to make a difference, so I left it in as a troubleshooting breadcrumb. Also as a troubleshooting step, I added a Xively client.get to see if I could pull but not push. That generated an HTTP error.  I also added a public wide open api key to my project and tried that (instead of the private one). Still no joy.  </p>
  
  <p>It sorta feels like although I'm connecting successfully to my wifi, but can't make a real connection to any services. I was hoping there was some super obvious step I missed. I could really use a helpful clue to get me on the right track again.  thanks!</p>
  
  <p>Micah Wyenn</p>
  
  <pre class="lang-cpp prettyprint-override"><code>#include &lt;Dhcp.h&gt;
  #include &lt;Dns.h&gt;
  #include &lt;Ethernet.h&gt;
  #include &lt;EthernetClient.h&gt;
  #include &lt;EthernetServer.h&gt;
  #include &lt;EthernetUdp.h&gt;
  #include &lt;util.h&gt;
  
  /*
       Hot Tub Monitor 
           --- If you are only calibrating your sensor, use the calibrate sensor script.  This is for submerged operation.
       This script will allow you to test to ensure the temp, Ph, and ORD sensors are operating and are calibrated correctly.----
  
       This script was written for the MEGA 2560 with the wireless shield, connecting in to Xively's cloud graph service
  
       The Mega 2560 with the Wireless shield and Probes uses the following pins:
       *  SPI bus interface 
       *  Onboard MicroSD card reader (uses SD Lib) on digital pin 4
       *  Digital Pins 7, 50, 51, 52, and 53 are reserved and shouldn't be used
       *  Digital Pin 18 is set to OUTPUT to power the temp probe on/off 
       *  Atlas Scientific Temp Sensor input on Analog Uno pin A4
       *  Phidgets Ph Sensor input on Analog Uno pin A2
       *  Phidgets ORD Sensor input on Analog Uno pin A0
  */
  // Libraries in use
  #include &lt;SPI.h&gt;
  #include &lt;WiFi.h&gt;
  #include &lt;b64.h&gt;
  #include &lt;HttpClient.h&gt;
  #include &lt;CountingStream.h&gt;
  #include &lt;Xively.h&gt;
  #include &lt;XivelyClient.h&gt;
  #include &lt;XivelyDatastream.h&gt;
  #include &lt;XivelyFeed.h&gt;
  #include &lt;WiFiClient.h&gt;
  #include &lt;WiFiServer.h&gt;
  #include &lt;WiFiUdp.h&gt;
  
  // setting up some of the globals
  const int TEMPPIN = 4;
  const int PHPIN = 1;
  const int ORPPIN = 0;
  boolean isDebugEnabled = true;   //setting up the debug state
  int status = WL_IDLE_STATUS;
  char ssid[] = "&lt;security snip&gt;"; //  your network SSID (name) 
  char pass[] = "&lt;security snip&gt;";    // your network password (use for WPA, or use as key for WEP)
  
  // My Xively key to let you upload data
  char xivelyKey[] = "&lt;security snip&gt;";
  // My xively feed ID
  #define xivelyFeed &lt;security snip&gt;
  // My datastreams
  char myWirelessStrStream[] = "MonitorWirelessStrength";
  char myORPStream[] = "ORP";
  char myPhStream[] = "Ph";
  char myTempStream[] = "Temp";
  
  // Creating the datastreams
  XivelyDatastream datastreams[] = {
      XivelyDatastream(myWirelessStrStream, strlen(myWirelessStrStream), DATASTREAM_FLOAT),
      XivelyDatastream(myORPStream, strlen(myORPStream), DATASTREAM_FLOAT),
      XivelyDatastream(myPhStream, strlen(myPhStream), DATASTREAM_FLOAT), 
      XivelyDatastream(myTempStream, strlen(myTempStream), DATASTREAM_FLOAT)
      };
  XivelyFeed feed(xivelyFeed, datastreams, 4);
  
  //starting the Xively client
  WiFiClient client;
  XivelyClient xivelyclient(client);
  
  
  void setup() {
    if (isDebugEnabled) {   //setting up the debug stream
      Serial.begin(9600);
      Serial.println("Hot Tub Monitor Debug Stream Starting");
      Serial.println("-----------------------------------");
    }
    pinMode(12,OUTPUT);   //this pin turns on the temp sensor - battery saver to have this on/off switchable
  
    // connect to the wifi
    // check for presence of the shield
    if (WiFi.status() == WL_NO_SHIELD) {
      Serial.println("WiFi shield not present"); 
      // don't continue:
      while(true);
    } 
  
    //Connect to the wifi network
      while ( status != WL_CONNECTED) { 
        Serial.print("Attempting to connect to WPA SSID: ");
        Serial.println(ssid);
        // Connect to WPA/WPA2 network:    
        status = WiFi.begin(ssid, pass);
  
        // wait 10 seconds for connection:
        delay(10000);
    }
    Serial.println("You're connected to the network");
    Serial.println(status);
    //printCurrentNet();
    printWifiData();
  
    // print the received signal strength:
    long rssi = WiFi.RSSI();
    Serial.print("signal strength (RSSI):");
    Serial.println(rssi);
  
  }
  
  void loop() {
  // report on the WiFi Signal strength  
     long rssi = WiFi.RSSI();
    if (isDebugEnabled) {   //send the signal str to Xively
      Serial.print("Sending RSSI to Xively:  ");
      Serial.println(rssi);
    }
      // print the received signal strength:
    datastreams[0].setFloat(rssi);
  
  //  get the temp from our Atlas Sci probe
    float tempC=get_temp();
    float tempF = (tempC*1.8)+32;
    datastreams[1].setFloat(tempF);
  
  // debugging info for temp
    if (isDebugEnabled) {   //send the temp to Xively
      Serial.print("Sending Temp to Xively:  ");
      Serial.println(tempF);
    }
  
  // get the Ph from our phidget's monitor  
    float Ph=get_Ph(tempC);
    datastreams[2].setFloat(Ph);
  
  // debugging info for Ph
    if (isDebugEnabled) {   //send the Ph to Xively
      Serial.print("Sending Ph to Xively:  ");
      Serial.println(Ph);
    } 
  
  // get the Ph from our phidget's monitor  
    float ORP=get_ORP();
    datastreams[3].setFloat(ORP);
  
  // debugging info for Ph
    if (isDebugEnabled) {   //send the Ph to Xively
      Serial.print("Sending ORP to Xively:  ");
      Serial.println(ORP);
    } 
  
  
    Serial.println("Uploading it to Xively");
    int ret = xivelyclient.put(feed, xivelyKey);
    Serial.print("xivelyclient.put returned ");
    Serial.println(ret);
  
  
     delay(10000);
  }  
  float get_Ph(float tempC) {  
    float Ph = analogRead(PHPIN);
    Ph = 7 -((2.5 - (Ph/200))/((0.257179 + 0.0000941468)*tempC));  // convert to the ph
    return Ph;
    }
  
  float get_ORP() {
    float ORP = analogRead(ORPPIN);
    ORP = (2.5 - (ORP/200))/1.037;  // convert to proper ORP
    return ORP;
    } 
  
   float get_temp(){      
    float v_out;
    float Temp;
    digitalWrite(A4, LOW);   //wtf is this for?
    digitalWrite(12, HIGH);
    delay(2);
    v_out = analogRead(4);
    digitalWrite(12, LOW);
    v_out*=.0048;
    v_out*=1000;
    Temp=0.0512 * v_out -20.5128;
    return Temp;
  }
  
  void printWifiData() {
    // print your WiFi shield's IP address:
    IPAddress ip = WiFi.localIP();
    Serial.print("IP Address: ");
    Serial.println(ip);
    Serial.println(ip);
  }
  </code></pre>
  
  <p><pre> 
      -----------------------------Error Log Output------------------------------------------
      Hot Tub Monitor Debug Stream Starting
      -----------------------------------
      Attempting to connect to WPA SSID: LionsGate
      You're connected to the network
      3
      IP Address: 192.168.1.137
      192.168.1.137
      signal strength (RSSI):-27
      Sending RSSI to Xively:  -27
      Sending Temp to Xively:  227.32
      Sending Ph to Xively:  6.98
      Sending ORP to Xively:  0.49
      Uploading it to Xively
      xivelyclient.put returned -1
      HTTP Error
      Sending RSSI to Xively:  -27
      Sending Temp to Xively:  154.33
      Sending Ph to Xively:  6.94
      Sending ORP to Xively:  0.87
      Uploading it to Xively
      xivelyclient.put returned -1
      HTTP Error
      Sending RSSI to Xively:  -27
      Sending Temp to Xively:  147.25
      Sending Ph to Xively:  6.94
      Sending ORP to Xively:  0.83
      Uploading it to Xively
      No Socket available
      xivelyclient.put returned -1
      No Socket available
      HTTP Error
      Sending RSSI to Xively:  -27
      Sending Temp to Xively:  149.91
      Sending Ph to Xively:  6.94
      Sending ORP to Xively:  0.87
      Uploading it to Xively
      No Socket available
      xivelyclient.put returned -1
      No Socket available
      HTTP Error
  </pre></p>