UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TcpListener.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "HAL/Runnable.h"
8#include "IPAddress.h"
9#include "SocketSubsystem.h"
11#include "HAL/RunnableThread.h"
13
22
23
24
27class FTcpListener
28 : public FRunnable
29{
30public:
31
41 , Endpoint(LocalEndpoint)
42 , SleepTime(InSleepTime)
43 , Socket(nullptr)
44 , bStopping(false)
46 {
47 Thread = FRunnableThread::Create(this, TEXT("FTcpListener"), 8 * 1024, TPri_Normal);
48 }
49
59 , SleepTime(InSleepTime)
61 , bStopping(false)
63 {
65 Socket->GetAddress(*LocalAddress);
66 Endpoint = FIPv4Endpoint(LocalAddress);
67
68 Thread = FRunnableThread::Create(this, TEXT("FTcpListener"), 8 * 1024, TPri_Normal);
69 }
70
73 {
74 if (Thread != nullptr)
75 {
76 Thread->Kill(true);
77 delete Thread;
78 }
79
80 if (bDeleteSocket && (Socket != nullptr))
81 {
83 Socket = nullptr;
84 }
85 }
86
87public:
88
94 const FIPv4Endpoint& GetLocalEndpoint() const
95 {
96 return Endpoint;
97 }
98
104 FSocket* GetSocket() const
105 {
106 return Socket;
107 }
108
114 bool IsActive() const
115 {
116 return ((Socket != nullptr) && !bStopping);
117 }
118
119public:
120
130 {
132 }
133
134public:
135
136 // FRunnable interface
137
138 virtual bool Init() override
139 {
140 if (Socket == nullptr)
141 {
142 Socket = FTcpSocketBuilder(TEXT("FTcpListener server"))
144 .BoundToEndpoint(Endpoint)
145 .Listening(8)
146 .WithSendBufferSize(2 * 1024 * 1024);
147 }
148
149 return (Socket != nullptr);
150 }
151
152 virtual uint32 Run() override
153 {
155
156 const bool bHasZeroSleepTime = (SleepTime == FTimespan::Zero());
157
158 while (!bStopping)
159 {
160 bool Pending = false;
161
162 // handle incoming connections
163 if (Socket->WaitForPendingConnection(Pending, SleepTime))
164 {
165 if (Pending)
166 {
167 FSocket* ConnectionSocket = Socket->Accept(*RemoteAddress, TEXT("FTcpListener client"));
168
169 if (ConnectionSocket != nullptr)
170 {
171 bool Accepted = false;
172
173 if (ConnectionAcceptedDelegate.IsBound())
174 {
176 }
177
178 if (!Accepted)
179 {
180 ConnectionSocket->Close();
182 }
183 }
184 }
185 else if(bHasZeroSleepTime)
186 {
187 FPlatformProcess::Sleep(0.f);
188 }
189 }
190 else
191 {
192 FPlatformProcess::Sleep(static_cast<float>(SleepTime.GetSeconds()));
193 }
194 }
195
196 return 0;
197 }
198
199 virtual void Stop() override
200 {
201 bStopping = true;
202 }
203
204 virtual void Exit() override { }
205
206private:
207
209 bool bDeleteSocket;
210
212 FIPv4Endpoint Endpoint;
213
215 FTimespan SleepTime;
216
219
221 bool bStopping;
222
224 bool bSocketReusable;
225
228
229private:
230
233};
#define TEXT(x)
Definition Platform.h:1272
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_DELEGATE_RetVal_TwoParams(ReturnValueType, DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:63
return true
Definition ExternalRpcRegistry.cpp:601
@ TPri_Normal
Definition GenericPlatformAffinity.h:27
#define PLATFORM_SOCKETSUBSYSTEM
Definition SocketSubsystem.h:44
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RunnableThread.h:20
static CORE_API FRunnableThread * Create(class FRunnable *InRunnable, const TCHAR *ThreadName, uint32 InStackSize=0, EThreadPriority InThreadPri=TPri_Normal, uint64 InThreadAffinityMask=FPlatformAffinity::GetNoAffinityMask(), EThreadCreateFlags InCreateFlags=EThreadCreateFlags::None)
Definition ThreadingBase.cpp:862
Definition Runnable.h:20
virtual uint32 Run()=0
virtual void Exit()
Definition Runnable.h:61
virtual void Stop()
Definition Runnable.h:53
virtual bool Init()
Definition Runnable.h:32
Definition Sockets.h:19
Definition TcpSocketBuilder.h:19
FTcpSocketBuilder Listening(int32 MaxBacklog)
Definition TcpSocketBuilder.h:166
FTcpSocketBuilder AsReusable()
Definition TcpSocketBuilder.h:74
FTcpSocketBuilder WithSendBufferSize(int32 SizeInBytes)
Definition TcpSocketBuilder.h:201
FTcpSocketBuilder BoundToEndpoint(const FIPv4Endpoint &Endpoint)
Definition TcpSocketBuilder.h:120
static SOCKETS_API ISocketSubsystem * Get(const FName &SubsystemName=NAME_None)
Definition SocketSubsystem.cpp:224
virtual TSharedRef< FInternetAddr > CreateInternetAddr(uint32 Address, uint32 Port=0)
Definition SocketSubsystem.h:317
virtual void DestroySocket(FSocket *Socket)=0
Definition SharedPointer.h:153
@ Socket
Definition EngineTypes.h:3849
@ false
Definition radaudio_common.h:23
Definition IPv4Endpoint.h:27
Definition Timespan.h:76
static FTimespan FromSeconds(double Seconds)
Definition Timespan.h:673
static FTimespan Zero()
Definition Timespan.h:747