как превратить сокет C ++ / CLI .Net в разъем boost :: asio? - PullRequest
3 голосов
/ 09 сентября 2011

То, что я хочу, - это простой пример кода создания нового сокета Boost Asio из сокета C ++ / CLI .Net.Как создать такую ​​вещь?

Вот псевдокод того, что я хотел бы сделать:

.net::socket a;
boost::asio::socket b;
b.assign(a.nativeWin32Socket());

Ответы [ 2 ]

4 голосов
/ 18 сентября 2011

Вы пробовали?

b.assign(a.Handle.ToInt32());

Также обратите внимание, что вам нужно будет использовать WSADuplicateSocket, так как вы можете получить, что b и a закроют сокет и укажут, чего вы не ожидаете.

Итак, вам нужно что-то вроде:

 SOCKET native = WSADuplicateSocket(a.Handle.ToInt32(),...);
 b.assign(native);

Полный ответ (проверено)

SOCKET native = a->Handle.ToInt32();
// Now native is a real socket
b.assign(boost::asio::ip::tcp::v4(), native);

Теперь неплохо продублировать сокет с помощью WSADuplicateSocket:

2 голосов
/ 18 сентября 2011

Вы можете использовать назначить , чтобы назначить собственный сокет для гнезда Boost asio. Смотрите принятый ответ на Как создать сокет Boost.Asio из собственного сокета .

...