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

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -