UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SocketSubsystem.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "AddressInfoTypes.h"
6#include "Containers/Array.h"
7#include "Containers/Map.h"
10#include "CoreMinimal.h"
11#include "CoreTypes.h"
12#include "HAL/CriticalSection.h"
13#include "IPAddress.h"
14#include "Logging/LogMacros.h"
16#include "SocketTypes.h"
18#include "Templates/UniquePtr.h"
19#include "UObject/NameTypes.h"
20#include "UObject/UnrealNames.h"
21
22class Error;
23class FInternetAddr;
24class FOutputDevice;
25class FSocket;
26struct FPacketTimestamp;
27
29
30// Need to guarantee the "default" socket subsystem on these platforms
31// as other subsystems (ie Steam) might override the default
32#ifndef PLATFORM_SOCKETSUBSYSTEM
33 #if PLATFORM_WINDOWS
34 #define PLATFORM_SOCKETSUBSYSTEM FName(TEXT("WINDOWS"))
35 #elif PLATFORM_MAC
36 #define PLATFORM_SOCKETSUBSYSTEM FName(TEXT("MAC"))
37 #elif PLATFORM_IOS
38 #define PLATFORM_SOCKETSUBSYSTEM FName(TEXT("IOS"))
39 #elif PLATFORM_UNIX
40 #define PLATFORM_SOCKETSUBSYSTEM FName(TEXT("UNIX"))
41 #elif PLATFORM_ANDROID
42 #define PLATFORM_SOCKETSUBSYSTEM FName(TEXT("ANDROID"))
43 #else
44 #define PLATFORM_SOCKETSUBSYSTEM FName(TEXT(""))
45 #endif
46#endif
47
49class FSocketDeleter;
50
52
58{
59public:
60
65
69 static SOCKETS_API void ShutdownAllSystems();
70
71
74
82 virtual bool Init(FString& Error) = 0;
83
87 virtual void Shutdown() = 0;
88
98 virtual FSocket* CreateSocket(const FName& SocketType, const FString& SocketDescription, bool bForceUDP = false)
99 {
101 return CreateSocket(SocketType, SocketDescription, NoProtocolTypeName);
102 }
103
113 UE_DEPRECATED(4.23, "Use the CreateSocket with the FName parameter for support for multiple protocol types.")
114 virtual FSocket* CreateSocket(const FName& SocketType, const FString& SocketDescription, ESocketProtocolFamily ProtocolType)
115 {
116 return CreateSocket(SocketType, SocketDescription, GetProtocolNameFromFamily(ProtocolType));
117 }
118
128 virtual FSocket* CreateSocket(const FName& SocketType, const FString& SocketDescription, const FName& ProtocolName) = 0;
129
140 SOCKETS_API FUniqueSocket CreateUniqueSocket(const FName& SocketType, const FString& SocketDescription, bool bForceUDP = false);
141
152 SOCKETS_API FUniqueSocket CreateUniqueSocket(const FName& SocketType, const FString& SocketDescription, const FName& ProtocolName);
153
162
168 virtual void DestroySocket(FSocket* Socket) = 0;
169
186 UE_DEPRECATED(4.23, "Migrate to GetAddressInfo that takes an FName as the protocol specification.")
194
214 virtual FAddressInfoResult GetAddressInfo(const TCHAR* HostName, const TCHAR* ServiceName = nullptr,
218
242 SOCKETS_API virtual void GetAddressInfoAsync(FAsyncGetAddressInfoCallback Callback, const TCHAR* HostName,
243 const TCHAR* ServiceName = nullptr, EAddressInfoFlags QueryFlags = EAddressInfoFlags::Default,
246
259
267 UE_DEPRECATED(4.23, "Please use GetAddressInfo to query hostnames")
269 {
271 if (GAIResult.Results.Num() > 0)
272 {
273 OutAddr.SetRawIp(GAIResult.Results[0].Address->GetRawIp());
274 return SE_NO_ERROR;
275 }
276
277 return SE_HOST_NOT_FOUND;
278 }
279
287 SOCKETS_API virtual class FResolveInfo* GetHostByName(const ANSICHAR* HostName);
288
294 virtual bool RequiresChatDataBeSeparate() = 0;
295
300 virtual bool RequiresEncryptedPackets() = 0;
301
309 virtual bool GetHostName(FString& HostName) = 0;
310
316 UE_DEPRECATED(4.23, "To support different address sizes, use CreateInternetAddr with no arguments and call SetIp/SetRawIp and SetPort on the returned object")
326
331
336 {
337 // If not implemented, returns the base version
338 return CreateInternetAddr();
339 }
340
349 SOCKETS_API virtual TUniquePtr<FRecvMulti> CreateRecvMulti(int32 MaxNumPackets, int32 MaxPacketSize,
351
355 virtual bool HasNetworkDevice() = 0;
356
361 virtual const TCHAR* GetSocketAPIName() const = 0;
362
367
372
373
374 // The following functions are not expected to be overridden
375
382
393
401
410
422
436
446
456
464
470 SOCKETS_API void RemoveHostNameFromCache(const ANSICHAR* HostName);
471
475 SOCKETS_API virtual bool IsSocketRecvMultiSupported() const;
476
477
481 virtual bool IsSocketWaitSupported() const = 0;
482
483
493
497 SOCKETS_API virtual bool IsRecvFromWithPktInfoSupported() const;
498
499protected:
500
507
508private:
509
511 FCriticalSection HostNameCacheSync;
512
515};
516
519{
520public:
522 : Subsystem(nullptr)
523 {
524 }
525
530
531 void operator()(FSocket* Socket) const
532 {
533 if (Subsystem && Socket)
534 {
535 Subsystem->DestroySocket(Socket);
536 }
537 }
538
539private:
540 ISocketSubsystem* Subsystem;
541};
542
544
545
EAddressInfoFlags
Definition AddressInfoTypes.h:12
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
ESocketErrors
Definition SocketErrors.h:9
@ SE_GET_LAST_ERROR_CODE
Definition SocketErrors.h:68
@ SE_HOST_NOT_FOUND
Definition SocketErrors.h:58
@ SE_NO_ERROR
Definition SocketErrors.h:10
TSharedPtr< ISocketSubsystem > IOnlineSocketPtr
Definition SocketSubsystem.h:543
ESocketProtocolFamily
Definition SocketTypes.h:16
ESocketType
Definition SocketTypes.h:33
@ SOCKTYPE_Unknown
Definition SocketTypes.h:35
ERecvMultiFlags
Definition SocketTypes.h:153
ETimestampTranslation
Definition SocketTypes.h:131
#define ANSI_TO_TCHAR(str)
Definition StringConv.h:1020
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IPAddress.h:22
Definition NameTypes.h:617
Definition OutputDevice.h:133
Definition IPAddressAsyncResolve.h:51
Definition IPAddressAsyncResolve.h:14
Definition SocketSubsystem.h:519
void operator()(FSocket *Socket) const
Definition SocketSubsystem.h:531
FSocketDeleter()
Definition SocketSubsystem.h:521
FSocketDeleter(ISocketSubsystem *InSubsystem)
Definition SocketSubsystem.h:526
Definition Sockets.h:19
Definition SocketSubsystem.h:58
SOCKETS_API ISocketSubsystem()
virtual SOCKETS_API void GetAddressInfoAsync(FAsyncGetAddressInfoCallback Callback, const TCHAR *HostName, const TCHAR *ServiceName=nullptr, EAddressInfoFlags QueryFlags=EAddressInfoFlags::Default, const FName ProtocolTypeName=NAME_None, ESocketType SocketType=ESocketType::SOCKTYPE_Unknown)
Definition SocketSubsystem.cpp:320
virtual SOCKETS_API bool IsSocketRecvMultiSupported() const
Definition SocketSubsystem.cpp:615
virtual FSocket * CreateSocket(const FName &SocketType, const FString &SocketDescription, const FName &ProtocolName)=0
virtual bool HasNetworkDevice()=0
SOCKETS_API void RemoveHostNameFromCache(const ANSICHAR *HostName)
Definition SocketSubsystem.cpp:495
virtual SOCKETS_API bool GetMultihomeAddress(TSharedRef< FInternetAddr > &Addr)
Definition SocketSubsystem.cpp:454
virtual TSharedRef< FInternetAddr > CreateInternetAddr(const FName ProtocolType)
Definition SocketSubsystem.h:335
virtual SOCKETS_API class FResolveInfoCached * CreateResolveInfoCached(TSharedPtr< FInternetAddr > Addr) const
Definition SocketSubsystem.cpp:529
virtual SOCKETS_API ESocketProtocolFamily GetProtocolFamilyFromName(const FName &InProtocolName) const
Definition SocketSubsystem.cpp:502
virtual bool Init(FString &Error)=0
static SOCKETS_API ISocketSubsystem * Get(const FName &SubsystemName=NAME_None)
Definition SocketSubsystem.cpp:224
virtual bool IsSocketWaitSupported() const =0
virtual SOCKETS_API TSharedRef< FInternetAddr > GetLocalHostAddr(FOutputDevice &Out, bool &bCanBindAll)
Definition SocketSubsystem.cpp:414
virtual TSharedPtr< FInternetAddr > GetAddressFromString(const FString &InAddress)=0
virtual SOCKETS_API double TranslatePacketTimestamp(const FPacketTimestamp &Timestamp, ETimestampTranslation Translation=ETimestampTranslation::LocalTimestamp)
Definition SocketSubsystem.cpp:620
SOCKETS_API void AddHostNameToCache(const ANSICHAR *HostName, TSharedPtr< class FInternetAddr > Addr)
Definition SocketSubsystem.cpp:488
virtual FAddressInfoResult GetAddressInfo(const TCHAR *HostName, const TCHAR *ServiceName=nullptr, EAddressInfoFlags QueryFlags=EAddressInfoFlags::Default, ESocketProtocolFamily ProtocolType=ESocketProtocolFamily::None, ESocketType SocketType=ESocketType::SOCKTYPE_Unknown)
Definition SocketSubsystem.h:187
SOCKETS_API int32 BindNextPort(FSocket *Socket, FInternetAddr &Addr, int32 PortCount, int32 PortIncrement)
Definition SocketSubsystem.cpp:248
virtual SOCKETS_API bool IsRecvFromWithPktInfoSupported() const
Definition SocketSubsystem.cpp:628
SOCKETS_API const TCHAR * GetSocketError(ESocketErrors Code=SE_GET_LAST_ERROR_CODE)
Definition SocketSubsystem.cpp:539
SOCKETS_API FUniqueSocket CreateUniqueSocket(const FName &SocketType, const FString &SocketDescription, bool bForceUDP=false)
Definition SocketSubsystem.cpp:83
virtual SOCKETS_API ~ISocketSubsystem()
virtual void Shutdown()=0
virtual const TCHAR * GetSocketAPIName() const =0
SOCKETS_API bool GetHostByNameFromCache(const ANSICHAR *HostName, TSharedPtr< class FInternetAddr > &Addr)
Definition SocketSubsystem.cpp:475
virtual FSocket * CreateSocket(const FName &SocketType, const FString &SocketDescription, bool bForceUDP=false)
Definition SocketSubsystem.h:98
virtual bool RequiresChatDataBeSeparate()=0
virtual SOCKETS_API TSharedRef< FInternetAddr > GetLocalBindAddr(FOutputDevice &Out)
Definition SocketSubsystem.cpp:441
virtual ESocketErrors GetLastErrorCode()=0
virtual SOCKETS_API TUniquePtr< FRecvMulti > CreateRecvMulti(int32 MaxNumPackets, int32 MaxPacketSize, ERecvMultiFlags Flags=ERecvMultiFlags::None)
Definition SocketSubsystem.cpp:607
virtual ESocketErrors GetHostByName(const ANSICHAR *HostName, FInternetAddr &OutAddr)
Definition SocketSubsystem.h:268
virtual SOCKETS_API bool GetLocalAdapterAddresses(TArray< TSharedPtr< FInternetAddr > > &OutAddresses)
Definition SocketSubsystem.cpp:362
virtual void DestroySocket(FSocket *Socket)=0
virtual bool GetHostName(FString &HostName)=0
virtual TSharedRef< FInternetAddr > CreateInternetAddr()=0
virtual ESocketErrors TranslateErrorCode(int32 Code)=0
static SOCKETS_API void ShutdownAllSystems()
Definition SocketSubsystem.cpp:96
virtual SOCKETS_API TArray< TSharedRef< FInternetAddr > > GetLocalBindAddresses()
Definition SocketSubsystem.cpp:326
virtual FAddressInfoResult GetAddressInfo(const TCHAR *HostName, const TCHAR *ServiceName=nullptr, EAddressInfoFlags QueryFlags=EAddressInfoFlags::Default, const FName ProtocolTypeName=NAME_None, ESocketType SocketType=ESocketType::SOCKTYPE_Unknown)=0
virtual SOCKETS_API FName GetProtocolNameFromFamily(ESocketProtocolFamily InProtocolFamily) const
Definition SocketSubsystem.cpp:516
virtual bool RequiresEncryptedPackets()=0
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition AddressInfoTypes.h:100
Definition PacketView.h:135