Edit:
Сокеты в стиле BSD в Emscripten C / C ++ являются веб-сокетами, так как в WebAssembly отсутствует низкоуровневый сетевой API-интерфейс для браузеров.
Итак, ваша цель - передать сокеты C / C ++ в EM_ASM
блок JS. После поиска исходного кода Emscripten я обнаружил, что WS.sockets[id]
должно работать :
#include <stdio.h>
#include <emscripten.h>
int mySock = socket(...);
EM_ASM({ // Or MAIN_THREAD_EM_ASM instead.
var ws = WS.sockets[$0];
// Play with your socket here...
}, mySock);
Я знаю, что это звучит недокументированным хакерским поведением, но в этот момент вы должны иметь дело с взломами, когда вам нужны низкоуровневые взаимодействия в Emscripten.
Оригинал (это неправильно, игнорировать)
BSD-сокеты в Emscripten C / C ++ являются веб-сокетами из-за отсутствия низкоуровневых сетевых API для браузеров.
Итак, ваша цель - передать сокеты C / C ++ в EM_ASM
блок JS. После некоторого поиска я нашел скрытый (недокументированный) API с именем FS.getStream()
. Я еще не тестировал его, так как на данный момент у меня нет подходящей тестовой среды, но вы можете попробовать вот так:
#include <stdio.h>
#include <emscripten.h>
int mySock = socket(...);
EM_ASM_({ // Or MAIN_THREAD_EM_ASM instead.
var stream = FS.getStream($0);
var data = new Uint8Array(32);
FS.write(stream, data, 0, data.length, 0);
}, mySock);
Подробнее об API FS
(хотя FS.getStream()
- один из немногих недокументированных методов) вы можете найти в официальной документации Emscripten .