THRIFT-549. Make socket client compatible with iPhone SDK as well as OS X
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@797545 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/cocoa/src/transport/TSocketClient.m b/lib/cocoa/src/transport/TSocketClient.m
index cc50bec..b4183fb 100644
--- a/lib/cocoa/src/transport/TSocketClient.m
+++ b/lib/cocoa/src/transport/TSocketClient.m
@@ -16,28 +16,39 @@
* specific language governing permissions and limitations
* under the License.
*/
-
-#import <Foundation/Foundation.h>
#import "TSocketClient.h"
+#import <CFNetwork/CFSocketStream.h>
@implementation TSocketClient
- (id) initWithHostname: (NSString *) hostname
port: (int) port
{
- NSInputStream * input = nil;
- NSOutputStream * output = nil;
-
- [NSStream getStreamsToHost: [NSHost hostWithName: hostname]
- port: port
- inputStream: &input
- outputStream: &output];
-
- self = [super initWithInputStream: input outputStream: output];
- [input open];
- [output open];
-
- return self;
+ NSInputStream * inputStream = NULL;
+ NSOutputStream * outputStream = NULL;
+ CFReadStreamRef readStream = NULL;
+ CFWriteStreamRef writeStream = NULL;
+ CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)hostname, port, &readStream, &writeStream);
+ if (readStream && writeStream) {
+ CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
+ CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
+
+ inputStream = (NSInputStream *)readStream;
+ [inputStream retain];
+ [inputStream setDelegate:self];
+ [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
+ [inputStream open];
+
+ outputStream = (NSOutputStream *)writeStream;
+ [outputStream retain];
+ [outputStream setDelegate:self];
+ [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
+ [outputStream open];
+ }
+
+ self = [super initWithInputStream: inputStream outputStream: outputStream];
+
+ return self;
}