corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的

栏目: 服务器 · 发布时间: 5年前

内容简介:在昨天的技术周会上发现 EnyimMemcached 中建立 Socket 连接的代码有问题,今天坐车的时候在手机上阅读 .net core 2.2 的 SqlClient 中同步建立 Socket 连接的代码建立 Socket 连接需要处理2个问题:1)处理连接失败的问题;2)处理连接超时的问题。SNITcpHandle 中这样处理连接失败的,如果 Connected 为 false ,就 dispose 当前 socket ,代码如下:

在昨天的技术周会上发现 EnyimMemcached 中建立 Socket 连接的代码有问题,今天坐车的时候在手机上阅读 .net core 2.2 的 SqlClient 中同步建立 Socket 连接的代码 SNITcpHandle.cs#L180 学习了一下。

建立 Socket 连接需要处理2个问题:1)处理连接失败的问题;2)处理连接超时的问题。

SNITcpHandle 中这样处理连接失败的,如果 Connected 为 false ,就 dispose 当前 socket ,代码如下:

sockets[i].Connect(ipAddresses[i], port);
if (sockets[i] != null) // sockets[i] can be null if cancel callback is executed during connect()
{
    if (sockets[i].Connected)
    {
        availableSocket = sockets[i];
        break;
    }
    else
    {
        sockets[i].Dispose();
        sockets[i] = null;
    }
}

连接超时的处理,SNITcpHandle 是借助 CancellationTokenSource 实现的

CancellationTokenSource cts = new CancellationTokenSource();
cts.CancelAfter(timeout);
void Cancel()
{
    for (int i = 0; i < sockets.Length; ++i)
    {
        try
        {
            if (sockets[i] != null && !sockets[i].Connected)
            {
                sockets[i].Dispose();
                sockets[i] = null;
            }
        }
        catch { }
    }
}
cts.Token.Register(Cancel);

第一次见到在同步方式中使用 CancellationTokenSource ,而且神奇地解决了检测连接超时以及在超时发生时 dispose socket 的问题。

从中学到了 CancellationTokenSource 可以当作更简单的定时器来使用,在博问中写了段简单的代码验证了一下,详见 C# 中的 CancellationTokenSource 有什么用


以上所述就是小编给大家介绍的《corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Introduction to Graph Theory

Introduction to Graph Theory

Douglas B. West / Prentice Hall / 2000-9-1 / USD 140.00

For undergraduate or graduate courses in Graph Theory in departments of mathematics or computer science. This text offers a comprehensive and coherent introduction to the fundamental topics of graph ......一起来看看 《Introduction to Graph Theory》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具