From: Andrew McGeachie Date: Fri, 24 Jul 2009 15:58:07 +0000 (+0000) Subject: THRIFT-549. Make socket client compatible with iPhone SDK as well as OS X X-Git-Tag: 0.2.0~61 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=bbd55ad8da7141ec5339944b6f497555ba2a4f6b;p=common%2Fthrift.git 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 cc50bec0..b4183fb8 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 #import "TSocketClient.h" +#import @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; }