GCDAsyncUdpSocket не может связать порт на симуляторе iOS

Я работаю над отправкой сообщения через UDP. Однако я попал в ловушку проблемы с «привязкой порта».

Когда я впервые собрал проект на симуляторе iOS, ничего странного не произошло. Все было хорошо.

Но когда я построил проект второй раз. Я получил сообщение об ошибке от терминала, когда приложение попыталось связать порт.

Сообщение выглядит следующим образом: «Домен ошибки = Код NSPOSIXErrorDomain = 48 «Адрес уже используется» UserInfo = 0x767c830 {NSLocalizedFailureReason = Ошибка в функции bind(), NSLocalizedDescription = Адрес уже используется}»

Что меня смущает, так это то, что ошибка не появлялась, когда я запускал свое приложение на iPad.

Я предполагаю, что, возможно, это связано с тем, что я не закрыл сокет. Но почему на iPad все идет правильно?

Надеюсь, кто-нибудь сможет это решить. Спасибо!


person BuG.BS    schedule 30.05.2013    source источник
comment
Видя то же самое здесь; это специфично для UDP; несмотря на то, что SO_REUSE установлен в GCDAAsyncUdpSocket. И «netstat -na» подтверждает, что порт привязан; и «lsof» подтверждает, что он больше не принадлежит процессу. Сброс брандмауэра и интерфейсов не помогает.   -  person Dirk-Willem van Gulik    schedule 01.06.2013


Ответы (1)


Текущий глава GDAAsyncUdpSocket не (также) устанавливает SO_REUSEPORT (он просто делает ADDRESS, что вполне достаточно для TCP).

Я просто выскочил в быстром исправлении:

https://github.com/dirkx/CocoaAsyncSocket/commit/5ec8c83d59ecb754824f706199eb612e299

https://github.com/dirkx/CocoaAsyncSocket

и это также должно быть исправлено вверх по течению:

https://github.com/robbiehanson/CocoaAsyncSocket/pull/159

Спасибо,

Dw.

person Dirk-Willem van Gulik    schedule 01.06.2013