Кажется, у меня все получилось. Не знаю точно, были ли ошибки в коде, который я разместил в моем вопросе (я так не думаю, потому что он действительно отправил нужное мне сообщение), но в итоге я использовал другой способ написания.
Был использован этот метод:
-(NSInteger) writeToServer:(const uint8_t *) buf
{
return [oStream write:buf maxLength:strlen((char*)buf)];
}
И этот код, который я использовал (вместо того, который выложили в вопросе):
case NSStreamEventHasSpaceAvailable:
event = @"NSStreamEventHasSpaceAvailable";
connectButton.enabled = NO;
disconnectButton.enabled = YES;
if (theStream == oStream)
{
//send data
NSString *msg = [[NSString alloc] initWithFormat:@"ping"];
const uint8_t *buffer = (const uint8_t *)[msg UTF8String];
NSInteger err = [self writeToServer:buffer];
[msg release];
if ( err == -1)
NSLog(@"Error sending data.");
else
NSLog(@"Success sending data.");
break;
Также я заметил, что сервер после read () и printf (msg) выдаст мне сообщение о том, что соединение было разорвано, поэтому я изменил код на стороне сервера, где у меня была проверка , был ли сервер все еще подключен к клиенту, например:
check = recv(newsockf,buffer,256, MSG_PEEK|MSG_DONTWAIT);
if(!(check < 0 && errno == EAGAIN))
{
//close socket;
//accept();
}
.. к этому:
if((check < 0 && errno != EAGAIN))
{
//close socket;
//accept();
}
Кажется, это удалось. Теперь это не отключается даром. Проблема решена.