Когда ejabberd запускается, он использует несколько портов (некоторые для XMPP, другие для дополнительных функций ejabberd, другие для Erlang). Обратите внимание, что некоторые порты могут быть в IPv6:
tcp 0 0 0.0.0.0:42859 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:4560 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:epmd 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5280 0.0.0.0:* LISTEN
tcp6 0 0 [::]:epmd [::]:* LISTEN
tcp6 0 0 [::]:xmpp-client [::]:* LISTEN
tcp6 0 0 [::]:xmpp-server [::]:* LISTEN
Может быть, у вас есть другая предыдущая установка ejabberd, которая там мешала? Или другой XMPP сервер?
Править: Peter Hosey указал, что массив в C не является тем же самым как указателем. (см. этот документ для деталей). Это объяснило бы ошибку, которую Вы видите и сделали бы код, который я отправил неправильно.
Другой ТАК вопрос, что ссылки gs на в его ответе предлагают обходное решение, которое я скопировал в контексте этого вопроса:
// PlayerState.h:
@interface PlayerState : NSObject
{
AudioQueueBufferRef _buffers[3];
}
@property(readonly) AudioQueueBufferRef * buffers;
// PlayerState.m:
@implementation PlayerState
@dynamic buffers;
- (AudioQueueBufferRef *)buffers { return _buffers; }
@end
Это позволило бы Вам доступу buffers
как будто это был указатель на массив AuidoQueueBufferRef
объекты.
@synthesize buffers
сбои для компиляции следующим образом: "ошибка: синтезируемое свойство 'буферы' нужно или назвать тем же как совместимый ivar или должно явно назвать ivar"
Попытка:
@synthesize buffers = _buffers;
Почему Вы переводите структуру в объект Objective C? Objective C является строгим надмножеством C, таким образом, можно просто использовать данную структуру как есть с Objective C.
[РЕДАКТИРОВАНИЕ] В ответ на Ваши комментарии, компилятор жалуется на mBuffers
объявление из-за правил о том, что допустимо как размер статического массива. Правила в C немного более строги, чем правила в C++. Как легкая фиксация, просто измените строку
static const int kNumberBuffers = 3;
в
#define kNumberBuffers 3
и затем структура должна скомпилировать правильно (если, конечно, это Вы включали необходимые заголовки, которые определяют все надлежащие типы данных такой как AudioStreamBasicDescription
, и т.д.).
Вы можете либо иметь три буфера ivars (buffer0, buffer1, buffer2), либо сделать его указателем на AudioQueueBufferRefs и отдельно выделить память для хранения трех AudioQueueBufferRefs. Или вы используете NSArray или NSData, если вам нужно переменное количество буферов.
Но, возвращаясь к более широкому контексту, вам, вероятно, не понадобится отслеживать AudioQueBufferRefs. Если вы выберете все три буфера, вы получите указатели на них в аудио очереди вызовов.
У меня есть некоторый аудиокод, который записывает и воспроизводит аудио, и он вызывает AudioQueueAllocateBuffer() и AudioQueueEnqueueBuffer() и после этого практически забывает о буферах.
Если вы пытаетесь написать какао-обертку для AudioQueue, не делайте этого.
Редактирование: Но чтобы ответить на ваш первоначальный вопрос: Вы не можете иметь массив в качестве свойства, потому что это не тип "Plain Ol' Data". Смотрите "Declared Properties" в документации Objective-C 2.0 в Xcode, и это: http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html