NSStreams を使用してプッシュ通知を送信する OS X アプリを作成しようとしています。すべて問題ないようですが、gateway.sandbox.push.apple.com にデータを送信するとエラー -9844 が返されます。SecureTransport.h から
errSSLConnectionRefused = -9844, /* peer dropped connection before responding */
これは、出力ストリームを作成して開く方法です。
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)@"gateway.sandbox.push.apple.com", 2195, &readStream, &writeStream);
self.outputPushStream = (__bridge_transfer NSOutputStream *)writeStream;
[self.outputPushStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL forKey:NSStreamSocketSecurityLevelKey];
self.outputPushStream.delegate = self;
[self.outputPushStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[self.outputPushStream open];
そして、NSStream デリゲートで NSStreamEventOpenCompleted イベントを受信すると、データを送信します。
const uint8_t *data = pushData.bytes;
[self.outputPushStream write:data maxLength:pushData.length];
これは証明書に問題がある可能性があると推測しています。キーチェーンにプッシュ通知用の開発証明書とキーがあります。私は SSL や NSStream の経験がないので、次にどこを見ればよいかわかりません。