ObjectDeliverer Ver 1.2.1リリース UDPReceiverの不具合修正


ObjectDelivererのVersion 1.2.1をリリース

今回はユーザーの方よりご指摘いただいた以下の不具合を修正しました。

InnerSocket = FUdpSocketBuilder(TEXT("ObjectDeliverer UdpSocket"))
        .WithReceiveBufferSize(1024 * 1024)
        .BoundToPort(BoundPort)
        .Build();


Receiver = new FUdpSocketReceiver(InnerSocket, FTimespan::FromMilliseconds(10), TEXT("UProtocolUdpSocketReceiver"));
Receiver->OnDataReceived().BindUObject(this, &UProtocolUdpSocketReceiver::UdpReceivedCallback);
Receiver->Start();

if (InnerSocket)
{
    DispatchConnected(this);
}

上記が修正前のソースです。

BoundPortに既に使われているポート番号が指定されると、InnerSocketにはnullptrが入るためその後FUdpSocketReceiverを生成したタイミングでクラッシュしていました。

今回はこれを単純ですが以下のように修正しました。

InnerSocket = FUdpSocketBuilder(TEXT("ObjectDeliverer UdpSocket"))
        .WithReceiveBufferSize(1024 * 1024)
        .BoundToPort(BoundPort)
        .Build();

if (InnerSocket)
{
        Receiver = new FUdpSocketReceiver(InnerSocket, FTimespan::FromMilliseconds(10), TEXT("UProtocolUdpSocketReceiver"));
        Receiver->OnDataReceived().BindUObject(this, &UProtocolUdpSocketReceiver::UdpReceivedCallback);
        Receiver->Start();
    DispatchConnected(this);
}

これでFUdpSocketBuilderでの初期化に失敗した場合でも、クラッシュすることはなくなりました。

この不具合を見つけて、同じような仕組みのTCP/IP Serverは大丈夫かと思いましたが、そちらはガードが既にかかっており大丈夫でした。

単純なミスをやらかしてしまい、お恥ずかしいです。


See also