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は大丈夫かと思いましたが、そちらはガードが既にかかっており大丈夫でした。
単純なミスをやらかしてしまい、お恥ずかしいです。