При использовании System.Net.Sockets.Socket
с моно на Linux предположительно моно в конечном итоге будет использовать сокет BSD (а в Windows - Winsock).Как использовать монофонические разъемы BSD?
Глядя на источник моно для скажем Socket.Bind()
это делает внешний вызов:
// Creates a new system socket, returning the handle
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern static void Bind_internal(IntPtr sock,
SocketAddress sa,
out int error);
Который говорит мне моно должны быть ссылающийся на родную библиотеку, которая выставляет такой метод подписи и родной библиотеки будет принимать заботу о кросс-платформенная реализация (поскольку в BSD или Winsock нет функции с именем Bind_internal
).
Итак, мой вопрос теперь становится тем, какую родную библиотеку использовать моно?
Чтобы быть более точным: https://github.com/mono/mono/blob/6f802b490ca568330cd5f32c319609899ba81c8e/mono/metadata/icall-def.h#L450, который соответствует https://github.com/mono/mono/ blob/6202a690ad14694ed74cdc990215e7dc2944da18/mono/metadata/socket-io.C# L1142 и найдите #if BSD. –
Я полностью пропустил, что такое MethodImplAttribute и делает, спасибо. – markmnl