title: Pushsharp 4.0.10 "Connection Error" for IOS device tokens
body: <p>I developed windows service for sending push notifications to both iOS and Android apps using pushsharp library. Recently I updated the library from 2.x.x to 4.0.10 and GCM notifications are sending fine but Ios notifications are not sending, always getting "Connection Error" And I need to send notifications to thousands of tokens, So I am looping through all the tokens and queuing. Even for 10 tokens also getting same error.
  Please suggest me what's wrong with my code. Here is my code snippet</p>
  
  <pre><code> public static void SendNotifications(List currentBrandNotications, long brandId)
   {
      byte[] appleCert = null;
      string p12File = @"aps_production_brand" + brandId.ToString().Trim() + ".p12";
      try
      {
          appleCert = File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "P12\\" + p12File));               
      }
      catch (Exception ex)
      {
          logger.Debug("P12 certificate is not avilable for BrandId: " + brandId);
      }
  
      try
      {
          logger.Debug(" Send PushNotifications To Apple :- ");
  
          if (appleCert != null)
          {
              // Configuration
              var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Production, appleCert, currentBrandNotications[0].P12Password);
  
              // Create a new broker
              var apnsBroker = new ApnsServiceBroker(config);
              var fbs = new FeedbackService(config);
              // Wire up events
              apnsBroker.OnNotificationFailed += (Notification, aggregateEx) =&gt;
              {
                  //ScheduledNotification ScheduledNotification = new InstantPNScheduler.ScheduledNotification();
  
                  aggregateEx.Handle(ex =&gt;
                  {
                      // See what kind of exception it was to further diagnose
                      if (ex is ApnsNotificationException)
                      {
                          var notificationException = (ApnsNotificationException)ex;
  
                          // Deal with the failed notification
                          var apnsNotification = notificationException.Notification;
                          var statusCode = notificationException.ErrorStatusCode;
                          logger.Debug("Apple Notification Failed: ID=" + apnsNotification.Identifier + " Code=" + statusCode);
  
                      }
                      else
                      {
                          // Inner exception might hold more useful information like an ApnsConnectionException           
                          logger.Debug(ex.InnerException.ToString());
                      }
                      // Mark it as handled
                      return true;
                  });
              };
  
              apnsBroker.OnNotificationSucceeded += (Notification) =&gt;
              {
                  logger.Debug("Apple Notification Sent!");                  
              };
  
              // Start the broker
              apnsBroker.Start();  
  
              foreach (ScheduledNotification notification in currentBrandNotications)
                   {                      
                  try
                  {
                      //logger.Debug("iOS Device token=" + notification.DeviceToken);                                             apnsBroker.QueueNotification(new ApnsNotification
                      {
                             DeviceToken = notification.DeviceToken,
                             Payload = JObject.Parse("{\"aps\":{\"alert\":\"" + notification.Message + "\",\"badge\":1,\"sound\":\"sound.caf\",\"BrandId\":\"" + brandId.ToString() + "\",\"notificationType\":\"Basic\",\"DeviceType\":\"" + notification.DeviceType + "\",\"DeviceToken\":\"" + notification.DeviceToken + "\",\"NotificationId\":\"" + notification.NotificationId + "\"}}")
  
                          });
                      }
                      Thread.Sleep(800);
                  }
                  catch (Exception ex)
                  {
  
                      logger.Debug(" SendPushNotificationToApple :- " + ex.Message);
                  }
              }
              // Stop the broker, wait for it to finish   
              // This isn't done after every message, but after you're
              // done with the broker
              apnsBroker.Stop();
          }
  
      }
      catch (Exception ex)
      {
          logger.Debug("Error" + ex.Message);
      }
      finally
      {
          //apnsBroker = null;
      }
  
  }
  </code></pre>
  
  <p>Note : If I put thread.sleep(800) in for loop, then notifications will be sent but it's getting too late in case of thousands of tokens. I need it without thread.sleep(800), even If I reduce below 800ms, getting same exception.
  Please help me what's wrong with my code.
  Any help would be appreciated.</p>