ios - GCDAsyncSocket Client not reading until write -
it's not code include, why might gcdasyncsocket client stall on reads until writedata queued? symptoms:
- "didconnecttohost" doesn't called though server calls "didacceptnewsocket'.
- "didreaddata" doesn't called when server writes data
- "socketdiddisconnect" not called
- writes client transmitted properly
incredibly oddly, calling "writedelayed" method (which merely enqueues "writedata" method) enables reads processed properly. removing "writedata" method disables reads.
this made me think configured gcd dispatch queue wrong tried every new , default serial , concurrent queue possible
or socket object being released before time, made class property, no avail.
one thing may complicating things (though don't know how), connection being made in response resolved nsnetservice (bonjour) object, might on different dispatch queue. tried wrapping "setupconnection" in block executed on main queue, no avail.
here's small amount of code, i'll edit if there questions.
thank you, james
-(void)setupconnection { self.queue = dispatch_queue_create(null, dispatch_queue_serial); self.socket = [[gcdasyncsocket alloc] initwithdelegate:self delegatequeue:self.queue]; } -(void)connect { nserror *error = nil; if(![self.socket connecttohost:self.socketinfo.address onport:self.socketinfo.port error:&error]) { nslog(@"i goofed: %@", error); } nslog(@"connecting to: %@:%i",self.socketinfo.address,self.socketinfo.port); } -(void)socket:(gcdasyncsocket *)sock didconnecttohost:(nsstring *)host port:(uint16_t)port { nslog(@"connected"); [self.socket readdatatodata:[gcdasyncsocket crlfdata] withtimeout:-1 tag:0]; } -(void)writedelayed { double delayinseconds = 2000000.0; dispatch_time_t poptime = dispatch_time(dispatch_time_now, (int64_t)(delayinseconds * nsec_per_sec)); dispatch_after(poptime, dispatch_get_main_queue(), ^(void){ nsdata* dataobj = [gcdasyncsocket crlfdata]; [self.socket writedata:dataobj withtimeout:-1 tag:1]; }); } ...
the answer 1 of higher objects in object chain released early, causing socket released well. word wise seems.
Comments
Post a Comment