栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

dotnet 跨平台兼容的 socket::shutdown 函数

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

dotnet 跨平台兼容的 socket::shutdown 函数

1、跨平台兼容

2、避免托管异常降低效率或者炸线程乃至虚拟机

平台兼容:Linux、Windows

函数实现: 

#if NETCOREAPP
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
#endif
        private static void Shutdown(Socket socket)
        {
            if (socket == null || socket.SocketType != SocketType.Stream)
            {
                return;
            }
            PlatformID platform = Environments.Platform;
            if (platform == PlatformID.Win32NT)
            {
                NativeMethods.win32_shutdown(socket.Handle, SocketShutdown.Send);
            }
            else if (platform == PlatformID.Unix)
            {
                NativeMethods.linux_shutdown(socket.Handle, SocketShutdown.Send);
            }
            else
            {
                try
                {
                    socket.Shutdown(SocketShutdown.Send);
                }
                catch (Exception) { }
            }
        }

P/Invoke 声明:

        private static class NativeMethods
        {
            [Dllimport("ws2_32.dll", SetLastError = false, EntryPoint = "shutdown")]
            public static extern SocketError win32_shutdown([In] IntPtr socketHandle, [In] SocketShutdown how);

            [Dllimport("libc", SetLastError = false, EntryPoint = "shutdown")]
            public static extern SocketError linux_shutdown([In] IntPtr socketHandle, [In] SocketShutdown how);

            [Dllimport("libc", SetLastError = false, EntryPoint = "setsockopt")]
            public static extern int linux_setsockopt(int socket, int level, int option_name, IntPtr option_value, int option_len);

            [Dllimport("ws2_32.dll", SetLastError = false, EntryPoint = "setsockopt")]
            public static extern int win32_setsockopt(int s, int level, int option_name, IntPtr optval, int optlen);
        }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/362159.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号