mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-30 23:36:26 -05:00
f7d59f3e0e
This implements: Socket, Poll, Accept, Bind, Connect, GetPeerName, GetSockName, Listen, Fcntl, SetSockOpt, Shutdown, Recv, RecvFrom, Send, SendTo, Write, and Close The implementation was done referencing: SwIPC, switchbrew, testing with libnx and inspecting its code, general information about bsd sockets online, and analysing official software. Not everything from these service calls is implemented, but everything that is not implemented will be logged in some way.
97 lines
1.6 KiB
C++
97 lines
1.6 KiB
C++
// Copyright 2018 yuzu emulator team
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include "common/common_types.h"
|
|
#include "core/hle/service/service.h"
|
|
|
|
namespace Core {
|
|
class System;
|
|
}
|
|
|
|
namespace Service::Sockets {
|
|
|
|
enum class Errno : u32 {
|
|
SUCCESS = 0,
|
|
BADF = 9,
|
|
AGAIN = 11,
|
|
INVAL = 22,
|
|
MFILE = 24,
|
|
NOTCONN = 107,
|
|
};
|
|
|
|
enum class Domain : u32 {
|
|
INET = 2,
|
|
};
|
|
|
|
enum class Type : u32 {
|
|
STREAM = 1,
|
|
DGRAM = 2,
|
|
RAW = 3,
|
|
SEQPACKET = 5,
|
|
};
|
|
|
|
enum class Protocol : u32 {
|
|
UNSPECIFIED = 0,
|
|
ICMP = 1,
|
|
TCP = 6,
|
|
UDP = 17,
|
|
};
|
|
|
|
enum class OptName : u32 {
|
|
REUSEADDR = 0x4,
|
|
BROADCAST = 0x20,
|
|
LINGER = 0x80,
|
|
SNDBUF = 0x1001,
|
|
RCVBUF = 0x1002,
|
|
SNDTIMEO = 0x1005,
|
|
RCVTIMEO = 0x1006,
|
|
};
|
|
|
|
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;
|
|
std::array<u8, 8> zeroes;
|
|
};
|
|
|
|
struct PollFD {
|
|
s32 fd;
|
|
u16 events;
|
|
u16 revents;
|
|
};
|
|
|
|
struct Linger {
|
|
u32 onoff;
|
|
u32 linger;
|
|
};
|
|
|
|
constexpr u16 POLL_IN = 0x01;
|
|
constexpr u16 POLL_PRI = 0x02;
|
|
constexpr u16 POLL_OUT = 0x04;
|
|
constexpr u16 POLL_ERR = 0x08;
|
|
constexpr u16 POLL_HUP = 0x10;
|
|
constexpr u16 POLL_NVAL = 0x20;
|
|
|
|
constexpr u32 FLAG_MSG_DONTWAIT = 0x80;
|
|
|
|
constexpr u32 FLAG_O_NONBLOCK = 0x800;
|
|
|
|
/// Registers all Sockets services with the specified service manager.
|
|
void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system);
|
|
|
|
} // namespace Service::Sockets
|