Files
UnrealEngineUWP/Engine/Source/Runtime/Sockets/Private/Unix/SocketsUnix.h
ryan durand 0f0464a30e Updating copyright for Engine Runtime.
#rnx
#rb none


#ROBOMERGE-OWNER: ryan.durand
#ROBOMERGE-AUTHOR: ryan.durand
#ROBOMERGE-SOURCE: CL 10869210 via CL 10869511 via CL 10869900
#ROBOMERGE-BOT: (v613-10869866)

[CL 10870549 by ryan durand in Main branch]
2019-12-26 14:45:42 -05:00

60 lines
1.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved
#pragma once
#include "BSDSockets/SocketsBSD.h"
#if PLATFORM_HAS_BSD_SOCKET_FEATURE_RECVMMSG
/**
* Implements platform specific data/buffers for RecvMulti in Linux
*/
struct FUnixRecvMulti : public FRecvMulti
{
friend class FSocketUnix;
protected:
/** Persistently stores preconfigured mmsghdr struct values, for use with recvmmsg */
TUniquePtr<mmsghdr[]> Headers;
/** Buffer for receiving/storing packet kernel timestamp data, during the call to recvmmsg */
TUniquePtr<uint8[]> RawTimestampData;
private:
/** Maps sections of DataBuffer for receiving packet data, within Headers */
TUniquePtr<iovec[]> BufferMaps;
/** The raw data buffer where all packet data is received/stored. */
TUniquePtr<uint8[]> DataBuffer;
public:
FUnixRecvMulti(ISocketSubsystem* SocketSubsystem, int32 InMaxNumPackets, int32 InMaxPacketSize, ERecvMultiFlags InitFlags);
virtual bool GetPacketTimestamp(int32 PacketIdx, FPacketTimestamp& OutTimestamp) const override;
virtual void CountBytes(FArchive& Ar) const override;
};
#endif
/**
* Unix specific socket implementation - primarily, adds support for recvmmsg
*/
class FSocketUnix : public FSocketBSD
{
public:
/**
* Base constructor
*/
FSocketUnix(SOCKET InSocket, ESocketType InSocketType, const FString& InSocketDescription, const FName& InSocketProtocol,
ISocketSubsystem* InSubsystem)
: FSocketBSD(InSocket, InSocketType, InSocketDescription, InSocketProtocol, InSubsystem)
{
}
virtual bool RecvMulti(FRecvMulti& MultiData, ESocketReceiveFlags::Type Flags) override;
virtual bool SetRetrieveTimestamp(bool bRetrieveTimestamp) override;
};