mirror of
https://github.com/GreemDev/Ryujinx.git
synced 2024-12-27 08:55:47 +00:00
366fe2dbb2
* bsd: Revamp API and make socket abstract This part of the code was really ancient and needed some love. As such this commit aims at separating the socket core logic from the IClient class and make it uses more modern APIs to read/write/parse data. * Address gdkchan's comment * Move TryConvertSocketOption to WinSockHelper * Allow reusing old fds and add missing locks around SocketInternal and ShutdownAllSockets * bsd: ton of changes - Make sockets per process - Implement eventfds - Rework Poll for support of eventfds - Handle protocol auto selection by type (used by gRPC) - Handle IPv6 socket creation * Address most of gdkchan comments * Fix inverted read logic for BSD socket read * bsd: Make Poll abstract via IBsdSocketPollManager * bsd: Improve naming of everything * Fix build issue from last commit (missed to save on VC) * Switch BsdContext registry to a concurrent dictionary * bsd: Implement socket creation flags logic and the non blocking flag * Remove unused enum from previous commit * bsd: Fix poll logic when 0 fds are present for a given poll manager and when timeout is very small (or 0) * Address gdkchan's comment
134 lines
6 KiB
C#
134 lines
6 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
|
|
namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
|
{
|
|
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
|
enum WsaError
|
|
{
|
|
/*
|
|
* All Windows Sockets error constants are biased by WSABASEERR from
|
|
* the "normal"
|
|
*/
|
|
WSABASEERR = 10000,
|
|
|
|
/*
|
|
* Windows Sockets definitions of regular Microsoft C error constants
|
|
*/
|
|
WSAEINTR = (WSABASEERR + 4),
|
|
WSAEBADF = (WSABASEERR + 9),
|
|
WSAEACCES = (WSABASEERR + 13),
|
|
WSAEFAULT = (WSABASEERR + 14),
|
|
WSAEINVAL = (WSABASEERR + 22),
|
|
WSAEMFILE = (WSABASEERR + 24),
|
|
|
|
/*
|
|
* Windows Sockets definitions of regular Berkeley error constants
|
|
*/
|
|
WSAEWOULDBLOCK = (WSABASEERR + 35),
|
|
WSAEINPROGRESS = (WSABASEERR + 36),
|
|
WSAEALREADY = (WSABASEERR + 37),
|
|
WSAENOTSOCK = (WSABASEERR + 38),
|
|
WSAEDESTADDRREQ = (WSABASEERR + 39),
|
|
WSAEMSGSIZE = (WSABASEERR + 40),
|
|
WSAEPROTOTYPE = (WSABASEERR + 41),
|
|
WSAENOPROTOOPT = (WSABASEERR + 42),
|
|
WSAEPROTONOSUPPORT = (WSABASEERR + 43),
|
|
WSAESOCKTNOSUPPORT = (WSABASEERR + 44),
|
|
WSAEOPNOTSUPP = (WSABASEERR + 45),
|
|
WSAEPFNOSUPPORT = (WSABASEERR + 46),
|
|
WSAEAFNOSUPPORT = (WSABASEERR + 47),
|
|
WSAEADDRINUSE = (WSABASEERR + 48),
|
|
WSAEADDRNOTAVAIL = (WSABASEERR + 49),
|
|
WSAENETDOWN = (WSABASEERR + 50),
|
|
WSAENETUNREACH = (WSABASEERR + 51),
|
|
WSAENETRESET = (WSABASEERR + 52),
|
|
WSAECONNABORTED = (WSABASEERR + 53),
|
|
WSAECONNRESET = (WSABASEERR + 54),
|
|
WSAENOBUFS = (WSABASEERR + 55),
|
|
WSAEISCONN = (WSABASEERR + 56),
|
|
WSAENOTCONN = (WSABASEERR + 57),
|
|
WSAESHUTDOWN = (WSABASEERR + 58),
|
|
WSAETOOMANYREFS = (WSABASEERR + 59),
|
|
WSAETIMEDOUT = (WSABASEERR + 60),
|
|
WSAECONNREFUSED = (WSABASEERR + 61),
|
|
WSAELOOP = (WSABASEERR + 62),
|
|
WSAENAMETOOLONG = (WSABASEERR + 63),
|
|
WSAEHOSTDOWN = (WSABASEERR + 64),
|
|
WSAEHOSTUNREACH = (WSABASEERR + 65),
|
|
WSAENOTEMPTY = (WSABASEERR + 66),
|
|
WSAEPROCLIM = (WSABASEERR + 67),
|
|
WSAEUSERS = (WSABASEERR + 68),
|
|
WSAEDQUOT = (WSABASEERR + 69),
|
|
WSAESTALE = (WSABASEERR + 70),
|
|
WSAEREMOTE = (WSABASEERR + 71),
|
|
|
|
/*
|
|
* Extended Windows Sockets error constant definitions
|
|
*/
|
|
WSASYSNOTREADY = (WSABASEERR + 91),
|
|
WSAVERNOTSUPPORTED = (WSABASEERR + 92),
|
|
WSANOTINITIALISED = (WSABASEERR + 93),
|
|
WSAEDISCON = (WSABASEERR + 101),
|
|
WSAENOMORE = (WSABASEERR + 102),
|
|
WSAECANCELLED = (WSABASEERR + 103),
|
|
WSAEINVALIDPROCTABLE = (WSABASEERR + 104),
|
|
WSAEINVALIDPROVIDER = (WSABASEERR + 105),
|
|
WSAEPROVIDERFAILEDINIT = (WSABASEERR + 106),
|
|
WSASYSCALLFAILURE = (WSABASEERR + 107),
|
|
WSASERVICE_NOT_FOUND = (WSABASEERR + 108),
|
|
WSATYPE_NOT_FOUND = (WSABASEERR + 109),
|
|
WSA_E_NO_MORE = (WSABASEERR + 110),
|
|
WSA_E_CANCELLED = (WSABASEERR + 111),
|
|
WSAEREFUSED = (WSABASEERR + 112),
|
|
|
|
/*
|
|
* Error return codes from gethostbyname() and gethostbyaddr()
|
|
* (when using the resolver). Note that these errors are
|
|
* retrieved via WSAGetLastError() and must therefore follow
|
|
* the rules for avoiding clashes with error numbers from
|
|
* specific implementations or language run-time systems.
|
|
* For this reason the codes are based at WSABASEERR+1001.
|
|
* Note also that [WSA]NO_ADDRESS is defined only for
|
|
* compatibility purposes.
|
|
*/
|
|
|
|
/* Authoritative Answer: Host not found */
|
|
WSAHOST_NOT_FOUND = (WSABASEERR + 1001),
|
|
|
|
/* Non-Authoritative: Host not found, or SERVERFAIL */
|
|
WSATRY_AGAIN = (WSABASEERR + 1002),
|
|
|
|
/* Non-recoverable errors, FORMERR, REFUSED, NOTIMP */
|
|
WSANO_RECOVERY = (WSABASEERR + 1003),
|
|
|
|
/* Valid name, no data record of requested type */
|
|
WSANO_DATA = (WSABASEERR + 1004),
|
|
|
|
/*
|
|
* Define QOS related error return codes
|
|
*
|
|
*/
|
|
WSA_QOS_RECEIVERS = (WSABASEERR + 1005),
|
|
/* at least one Reserve has arrived */
|
|
WSA_QOS_SENDERS = (WSABASEERR + 1006),
|
|
/* at least one Path has arrived */
|
|
WSA_QOS_NO_SENDERS = (WSABASEERR + 1007),
|
|
/* there are no senders */
|
|
WSA_QOS_NO_RECEIVERS = (WSABASEERR + 1008),
|
|
/* there are no receivers */
|
|
WSA_QOS_REQUEST_CONFIRMED = (WSABASEERR + 1009),
|
|
/* Reserve has been confirmed */
|
|
WSA_QOS_ADMISSION_FAILURE = (WSABASEERR + 1010),
|
|
/* error due to lack of resources */
|
|
WSA_QOS_POLICY_FAILURE = (WSABASEERR + 1011),
|
|
/* rejected for administrative reasons - bad credentials */
|
|
WSA_QOS_BAD_STYLE = (WSABASEERR + 1012),
|
|
/* unknown or conflicting style */
|
|
WSA_QOS_BAD_OBJECT = (WSABASEERR + 1013),
|
|
/* problem with some part of the filterspec or providerspecific
|
|
* buffer in general */
|
|
WSA_QOS_TRAFFIC_CTRL_ERROR = (WSABASEERR + 1014),
|
|
/* problem with some part of the flowspec */
|
|
WSA_QOS_GENERIC_ERROR = (WSABASEERR + 1015)
|
|
}
|
|
}
|