title: APNS - notifications push ios: Connection reset by peer PHP
body: <p>I have had Push Notifications working fine. But some of the times, from nowhere it starts giving error:</p>
  
  <p><strong><em>stream_socket_client(): SSL: Connection reset by peer</em></strong></p>
  
  <blockquote>
    <p>Weird thing is i don't have to do anything to resolve it but wait.
    After sometime, it starts working back again.</p>
  </blockquote>
  
  <p>I know it is a <strong>duplicate</strong> of many questions like:
  <a href="https://stackoverflow.com/questions/31706286/notifications-push-ios-connection-reset-by-peer">notifications-push-ios-connection-reset-by-peer</a>
  But none of them solves my problem.</p>
  
  <p>I am using PHP stream_socket_client to generate the socket connection</p>
  
  <p>Code in use is:</p>
  
  <pre><code> &lt;?php
  ini_set('display_errors','On'); 
  error_reporting(E_ALL);
  $deviceToken= 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';      
  $passphrase = ' ';
  $message = 'my first notification';
  ////////////////////////////////////////////////////////////////////////////////
  $ctx = stream_context_create();
  stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
  stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
  // Open a connection to the APNS server
  $fp = stream_socket_client(
      'ssl://gateway.sandbox.push.apple.com:2195', $err,
      $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
  if (!$fp)
      exit("Failed to connect: $err $errstr" . PHP_EOL);
  echo 'Connected to APNS' . PHP_EOL;
  // Create the payload body
  $body['aps'] = array(
      'alert' =&gt; $message,
      'sound' =&gt; 'default'
      );
  
  // Encode the payload as JSON
  $payload = json_encode($body);
  // Build the binary notification
  $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
  // Send it to the server
  $result = fwrite($fp, $msg, strlen($msg));
  if (!$result)
      echo 'Message not delivered' . PHP_EOL;
  else
      echo 'Message successfully delivered' . PHP_EOL;
  // Close the connection
  }
  </code></pre>