2026-01-26 01:30:53 +01:00
|
|
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
2026-01-06 22:44:57 +01:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
|
2022-04-23 04:59:50 -04:00
|
|
|
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
2018-01-18 20:35:03 +01:00
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
2021-10-07 13:29:33 -04:00
|
|
|
#include "common/common_funcs.h"
|
2020-07-11 22:26:24 -03:00
|
|
|
#include "common/common_types.h"
|
2018-01-18 20:35:03 +01:00
|
|
|
|
2020-07-11 22:37:47 -03:00
|
|
|
namespace Core {
|
|
|
|
|
class System;
|
|
|
|
|
}
|
|
|
|
|
|
2018-04-19 21:41:44 -04:00
|
|
|
namespace Service::Sockets {
|
2018-01-18 20:35:03 +01:00
|
|
|
|
2020-07-11 22:26:24 -03:00
|
|
|
enum class Errno : u32 {
|
|
|
|
|
SUCCESS = 0,
|
|
|
|
|
BADF = 9,
|
|
|
|
|
AGAIN = 11,
|
|
|
|
|
INVAL = 22,
|
|
|
|
|
MFILE = 24,
|
2023-07-01 17:28:43 -07:00
|
|
|
PIPE = 32,
|
2022-07-30 05:58:23 +02:00
|
|
|
MSGSIZE = 90,
|
2023-07-01 17:28:43 -07:00
|
|
|
CONNABORTED = 103,
|
2023-02-21 20:43:31 +01:00
|
|
|
CONNRESET = 104,
|
2020-07-11 22:26:24 -03:00
|
|
|
NOTCONN = 107,
|
2022-07-30 05:58:23 +02:00
|
|
|
TIMEDOUT = 110,
|
2024-01-30 12:24:47 +01:00
|
|
|
CONNREFUSED = 111,
|
2023-06-19 18:17:43 -07:00
|
|
|
INPROGRESS = 115,
|
2026-01-26 01:30:53 +01:00
|
|
|
ISCONN = 106,
|
2023-06-19 18:17:43 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class GetAddrInfoError : s32 {
|
|
|
|
|
SUCCESS = 0,
|
|
|
|
|
ADDRFAMILY = 1,
|
|
|
|
|
AGAIN = 2,
|
|
|
|
|
BADFLAGS = 3,
|
|
|
|
|
FAIL = 4,
|
|
|
|
|
FAMILY = 5,
|
|
|
|
|
MEMORY = 6,
|
|
|
|
|
NODATA = 7,
|
|
|
|
|
NONAME = 8,
|
|
|
|
|
SERVICE = 9,
|
|
|
|
|
SOCKTYPE = 10,
|
|
|
|
|
SYSTEM = 11,
|
|
|
|
|
BADHINTS = 12,
|
|
|
|
|
PROTOCOL = 13,
|
|
|
|
|
OVERFLOW_ = 14, // avoid name collision with Windows macro
|
|
|
|
|
OTHER = 15,
|
2020-07-11 22:26:24 -03:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class Domain : u32 {
|
2023-06-19 18:17:43 -07:00
|
|
|
Unspecified = 0,
|
2020-07-11 22:26:24 -03:00
|
|
|
INET = 2,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class Type : u32 {
|
2023-06-19 18:17:43 -07:00
|
|
|
Unspecified = 0,
|
2020-07-11 22:26:24 -03:00
|
|
|
STREAM = 1,
|
|
|
|
|
DGRAM = 2,
|
|
|
|
|
RAW = 3,
|
|
|
|
|
SEQPACKET = 5,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class Protocol : u32 {
|
2023-06-19 18:17:43 -07:00
|
|
|
Unspecified = 0,
|
2020-07-11 22:26:24 -03:00
|
|
|
ICMP = 1,
|
|
|
|
|
TCP = 6,
|
|
|
|
|
UDP = 17,
|
|
|
|
|
};
|
|
|
|
|
|
2023-06-19 18:17:43 -07:00
|
|
|
enum class SocketLevel : u32 {
|
2026-01-26 01:30:53 +01:00
|
|
|
IP = 0,
|
|
|
|
|
TCP = 6,
|
2023-06-19 18:17:43 -07:00
|
|
|
SOCKET = 0xffff, // i.e. SOL_SOCKET
|
|
|
|
|
};
|
|
|
|
|
|
2020-07-11 22:26:24 -03:00
|
|
|
enum class OptName : u32 {
|
|
|
|
|
REUSEADDR = 0x4,
|
2022-04-07 23:05:50 +02:00
|
|
|
KEEPALIVE = 0x8,
|
2020-07-11 22:26:24 -03:00
|
|
|
BROADCAST = 0x20,
|
|
|
|
|
LINGER = 0x80,
|
|
|
|
|
SNDBUF = 0x1001,
|
|
|
|
|
RCVBUF = 0x1002,
|
|
|
|
|
SNDTIMEO = 0x1005,
|
|
|
|
|
RCVTIMEO = 0x1006,
|
2023-06-19 18:17:43 -07:00
|
|
|
ERROR_ = 0x1007, // avoid name collision with Windows macro
|
|
|
|
|
NOSIGPIPE = 0x800, // at least according to libnx
|
2026-01-06 22:44:57 +01:00
|
|
|
ACCEPTFILTER = 0x1000,
|
|
|
|
|
BINTIME = 0x2000,
|
|
|
|
|
NO_OFFLOAD = 0x4000,
|
|
|
|
|
NO_DDP = 0x8000,
|
2020-07-11 22:26:24 -03:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class ShutdownHow : s32 {
|
|
|
|
|
RD = 0,
|
|
|
|
|
WR = 1,
|
|
|
|
|
RDWR = 2,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class FcntlCmd : s32 {
|
|
|
|
|
GETFL = 3,
|
|
|
|
|
SETFL = 4,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct SockAddrIn {
|
|
|
|
|
u8 len;
|
|
|
|
|
u8 family;
|
|
|
|
|
u16 portno;
|
|
|
|
|
std::array<u8, 4> ip;
|
2026-05-18 23:54:47 +02:00
|
|
|
std::array<u8, 248> zeroes;
|
2020-07-11 22:26:24 -03:00
|
|
|
};
|
2026-05-18 23:54:47 +02:00
|
|
|
static_assert(sizeof(SockAddrIn) == 0x100);
|
2020-07-11 22:26:24 -03:00
|
|
|
|
2020-08-31 10:20:44 -04:00
|
|
|
enum class PollEvents : u16 {
|
|
|
|
|
// Using Pascal case because IN is a macro on Windows.
|
|
|
|
|
In = 1 << 0,
|
|
|
|
|
Pri = 1 << 1,
|
|
|
|
|
Out = 1 << 2,
|
|
|
|
|
Err = 1 << 3,
|
|
|
|
|
Hup = 1 << 4,
|
|
|
|
|
Nval = 1 << 5,
|
2023-06-19 18:17:43 -07:00
|
|
|
RdNorm = 1 << 6,
|
|
|
|
|
RdBand = 1 << 7,
|
|
|
|
|
WrBand = 1 << 8,
|
2020-08-31 10:20:44 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
DECLARE_ENUM_FLAG_OPERATORS(PollEvents);
|
|
|
|
|
|
2020-07-11 22:26:24 -03:00
|
|
|
struct PollFD {
|
|
|
|
|
s32 fd;
|
2020-08-31 10:20:44 -04:00
|
|
|
PollEvents events;
|
|
|
|
|
PollEvents revents;
|
2020-07-11 22:26:24 -03:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct Linger {
|
|
|
|
|
u32 onoff;
|
|
|
|
|
u32 linger;
|
|
|
|
|
};
|
|
|
|
|
|
2023-02-18 16:26:48 -05:00
|
|
|
void LoopProcess(Core::System& system);
|
2018-01-18 20:35:03 +01:00
|
|
|
|
2018-04-19 21:41:44 -04:00
|
|
|
} // namespace Service::Sockets
|