objective c - (iphone) how to force close socket stream? -
i use following code connect server , handle events.
copy-paste of http://www.devx.com/wireless/article/43551
i want force close stream before nsstreameventendencountered.
documentation lacking , having hard time figure out how force close streams associated connection. (or close underlying socket if have to)
thank you
-(void) connecttoserverusingstream:(nsstring *)urlstr portno: (uint) portno { if (![urlstr isequaltostring:@""]) { nsurl *website = [nsurl urlwithstring:urlstr]; if (!website) { nslog(@"%@ not valid url"); return; } else { [nsstream getstreamstohostnamed:urlstr port:portno inputstream:&istream outputstream:&ostream]; [istream retain]; [ostream retain]; [istream setdelegate:self]; [ostream setdelegate:self]; [istream scheduleinrunloop:[nsrunloop currentrunloop] formode:nsdefaultrunloopmode]; [ostream scheduleinrunloop:[nsrunloop currentrunloop] formode:nsdefaultrunloopmode]; [ostream open]; [istream open]; } } }
and handles event
- (void)stream:(nsstream *)stream handleevent:(nsstreamevent)eventcode { nslog(@"stream event %d", eventcode) ; if( stream == istream ) nslog(@"on input stream"); else if( stream == ostream ) nslog(@"on output stream"); else nslog(@"on unknown stream identifier") ; switch(eventcode) { case nsstreameventendencountered: { nslog(@"stream ended; closed") ; [stream close]; [stream removefromrunloop:[nsrunloop currentrunloop] formode:nsdefaultrunloopmode]; [stream release]; stream = nil; // stream ivar, reinit break; } case nsstreameventerroroccurred: nslog(@"stream error") ; break ; case nsstreameventhasbytesavailable: //todo: read here break ; case nsstreameventnone: nslog(@"stream null event") ; break ; case nsstreameventopencompleted: nslog(@"stream open") ; break ; case nsstreameventhasspaceavailable: //write here break ; } }
execute following method on thread/runloop stream scheduled on:
- (void)closestream:(nsstream *)stream { [stream close]; [stream removefromrunloop:[nsrunloop currentrunloop] formode:nsdefaultrunloopmode]; [stream release]; stream = nil; }
Comments
Post a Comment