Способы прослушивания UDP-порта с помощью mozilla firefox

Вкратце, я пытаюсь написать компонент C ++ XPCOM, который прослушивает порт UDP и вызывает функцию обратного вызова (функция javascript) каждый раз, когда приходит пакет UDP.

Извините, если ответ слишком очевиден, но мне было интересно, как можно прослушивать UDP-порт с помощью Mozilla (желательно что-то простое)?

Я знаю, что существует интерфейс под названием nsIServerSocket, который позволяет подключать к нему некоторых слушателей, но он предназначен только для открытия TCP-портов. Есть ли какой-либо UDP-эквивалент этого (где я могу прикрепить слушателя, который уведомляется каждый раз, когда приходит UDP-пакет)?

Я также знаю, что, вероятно, мог бы использовать PR_OpenUDPSocket и тому подобное. Есть ли способ использовать это без работы с потоками? (Насколько я понимаю, мне нужно вернуться к вызывающей функции javascript после открытия порта).

Спасибо.


person Community    schedule 20.09.2011    source источник


Ответы (1)


Почему вам нужно ограничивать себя API Mozilla, если вы пишете код на C ++? Вы можете напрямую использовать API сокетов POSIX, см. Как настроить сокет Winsock UDP? для примера WinSock (единственная разница для Linux и OS X должна заключаться в том, что WSAStartup() вызов не нужен). nsIServerSocket в основном полезен для кода JavaScript, у которого нет возможности напрямую использовать системные библиотеки.

Если вы предпочитаете прямой ответ на свой вопрос: нет, XPCOM API для создания сокетов UDP отсутствует. Вы уже нашли NSPR API (PR_OpenUDPSocket()), но он, вероятно, разработан с учетом связи с DNS, поскольку это практически единственная связь по протоколу UDP, которую может выполнять браузер. Не ждите здесь многого.

И примечание: вы можете избежать бинарных компонентов XPCOM и создать собственную библиотеку, которую можно вызывать через js-ctypes. См. здесь, чтобы подробности.

person Wladimir Palant    schedule 20.09.2011
comment
Я просто подумал, что переносимость будет меньшей проблемой, если я буду использовать API Mozilla. Спасибо за ответ. - person ; 21.09.2011
comment
@aki: В наши дни проблема с переносимостью, как правило, гораздо меньше - она ​​была очень серьезной еще во времена создания NSPR. - person Wladimir Palant; 21.09.2011