Я не уверен, является ли это точной причиной вашей проблемы, но это, безусловно, может быть так: вы никогда не инициализируете read
, поэтому непредсказуемо перезаписываете какой-то байт в памяти вашей программы.Это должно быть что-то вроде:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
char read;
do {
chk = (int) recv(connfd, &read, 1, 0);
if(chk==-1) {
printf("Error in recv(): connfd = %d\n",connfd );
perror(err);
}
else if (chk ==0) {
[messagesView insertText:@"\nConnection closed by remote host\n"];
printf("Connection closed by remote host\n");
}
else {
if( read == '\n') {
[messagesView insertText:@"\\n\n"];
printf("\\n");
}
else if (read == '\r') {
[messagesView insertText:@"\\r\r"];
printf("\\r");
}
else {
[messagesView insertText:[NSString stringWithFormat:@"%c", read]];
printf("%c", read);
}
printf(" -- %d\n", read);
}
} while (chk>0);
[pool drain];
Хотя, как отмечает Джош Касвелл, все эти сообщения insertText:
должны быть примерно такими: [messagesView performSelectorOnMainThread:@selector(insertText:) withObject:@"\nConnection closed by remote host\n" afterDelay:0]
.