Socket Services: Difference between revisions
| No edit summary | DaniElectra (talk | contribs) m →Socket module errors:  Add more result codes | ||
| (38 intermediate revisions by 6 users not shown) | |||
| Line 1: | Line 1: | ||
| [[Category:Services]] | [[Category:Services]] | ||
| = Socket service "soc:U" = | The socket sysmodule has a maximum limit of 64 sockets in total. | ||
| = Socket user service "soc:U" = | |||
| There can be up to 18 sessions of this service. | |||
| {| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| |- | |- | ||
| !  Command Header | !  Command Header | ||
| !  Available since system-version | |||
| !  Description | !  Description | ||
| |- | |- | ||
| | 0x00010044 | | 0x00010044 | ||
| |  | |||
| | [[SOCU:InitializeSockets|InitializeSockets]] | | [[SOCU:InitializeSockets|InitializeSockets]] | ||
| |- | |- | ||
| | 0x000200C2 | | 0x000200C2 | ||
| |  | |||
| | [[SOCU:socket|socket]] | | [[SOCU:socket|socket]] | ||
| |- | |- | ||
| | 0x00030082 | | 0x00030082 | ||
| |  | |||
| | [[SOCU:listen|listen]] | | [[SOCU:listen|listen]] | ||
| |- | |- | ||
| | 0x00040082 | | 0x00040082 | ||
| |  | |||
| | [[SOCU:accept|accept]] | | [[SOCU:accept|accept]] | ||
| |- | |- | ||
| | 0x00050084 | | 0x00050084 | ||
| |  | |||
| | [[SOCU:bind|bind]] | | [[SOCU:bind|bind]] | ||
| |- | |- | ||
| | 0x00060084 | | 0x00060084 | ||
| |  | |||
| | [[SOCU:connect|connect]] | | [[SOCU:connect|connect]] | ||
| |- | |- | ||
| | 0x00070104 | | 0x00070104 | ||
| |  | |||
| | [[SOCU:recvfrom_other|recvfrom_other]] | | [[SOCU:recvfrom_other|recvfrom_other]] | ||
| |- | |- | ||
| | 0x00080102 | | 0x00080102 | ||
| |  | |||
| | [[SOCU:recvfrom|recvfrom]] | | [[SOCU:recvfrom|recvfrom]] | ||
| |- | |- | ||
| | 0x00090106 | | 0x00090106 | ||
| |  | |||
| | [[SOCU:sendto_other|sendto_other]] | | [[SOCU:sendto_other|sendto_other]] | ||
| |- | |- | ||
| | 0x000A0106 | | 0x000A0106 | ||
| |  | |||
| | [[SOCU:sendto|sendto]] | | [[SOCU:sendto|sendto]] | ||
| |- | |- | ||
| | 0x000B0042 | | 0x000B0042 | ||
| |  | |||
| | [[SOCU:close|close]] | | [[SOCU:close|close]] | ||
| |- | |||
| | 0x000C0082 | |||
| |  | |||
| | [[SOCU:shutdown|shutdown]] | |||
| |- | |- | ||
| | 0x000D0082 | | 0x000D0082 | ||
| |  | |   | ||
| | [[SOCU:gethostbyname|gethostbyname]] | |||
| |- | |- | ||
| |  | | 0x000E00C2 | ||
| |  | |  | ||
| | [[SOCU:gethostbyaddr|gethostbyaddr]] | |||
| |- | |||
| | 0x000F0106 | |||
| |  | |||
| | [[SOCU:getaddrinfo|getaddrinfo]] | |||
| |- | |||
| | 0x00100102 | |||
| |  | |||
| | [[SOCU:getnameinfo|getnameinfo]] | |||
| |- | |||
| | 0x00110102 | |||
| |  | |||
| | [[SOCU:getsockopt|getsockopt]] | |||
| |- | |- | ||
| | 0x00120104 | | 0x00120104 | ||
| |  | |||
| | [[SOCU:setsockopt|setsockopt]] | | [[SOCU:setsockopt|setsockopt]] | ||
| |- | |||
| | 0x001300C2 | |||
| |  | |||
| | [[SOCU:fcntl|fcntl]] | |||
| |- | |||
| | 0x00140084 | |||
| |  | |||
| | [[SOCU:poll|poll]] | |||
| |- | |||
| | 0x00150042 | |||
| |  | |||
| | [[SOCU:sockatmark|sockatmark]] | |||
| |- | |||
| | 0x00160000 | |||
| |  | |||
| | [[SOCU:gethostid|gethostid]] | |||
| |- | |||
| | 0x00170082 | |||
| |  | |||
| | [[SOCU:getsockname|getsockname]] | |||
| |- | |||
| | 0x00180082 | |||
| |  | |||
| | [[SOCU:getpeername|getpeername]] | |||
| |- | |- | ||
| | 0x00190000 | | 0x00190000 | ||
| |  | |||
| | [[SOCU:ShutdownSockets|ShutdownSockets]] | | [[SOCU:ShutdownSockets|ShutdownSockets]] | ||
| |- | |||
| | 0x001A00C0 | |||
| |  | |||
| | [[SOCU:GetNetworkOpt|GetNetworkOpt]] | |||
| |- | |||
| | 0x001B0040 | |||
| |  | |||
| | [[SOCU:ICMPSocket|ICMPSocket]] | |||
| |- | |||
| | 0x001C0104 | |||
| |  | |||
| | [[SOCU:ICMPPing|ICMPPing]] | |||
| |- | |||
| | 0x001D0040 | |||
| |  | |||
| | [[SOCU:ICMPCancel|ICMPCancel]] | |||
| |- | |||
| | 0x001E0040 | |||
| |  | |||
| | [[SOCU:ICMPClose|ICMPClose]] | |||
| |- | |||
| | 0x001F0040 | |||
| |  | |||
| | [[SOCU:GetResolverInfo|GetResolverInfo]] | |||
| |- | |||
| | 0x00200146 | |||
| |  | |||
| | [[SOCU:SendToMultiple|SendToMultiple]] | |||
| |- | |||
| | 0x00210002 | |||
| |  | |||
| | [[SOCU:CloseSockets|CloseSockets]] | |||
| |- | |||
| | 0x00220040 | |||
| |  | |||
| | (int sockfd) Might be the inverse of command 0x00230040? | |||
| |- | |||
| | 0x00230040 | |||
| |  | |||
| | [[SOCU:AddGlobalSocket|AddGlobalSocket]] | |||
| |- | |||
| | 0x100100C0 | |||
| | ? | |||
| | ? | |||
| |- | |||
| | 0x10030142 | |||
| | ? | |||
| | ? | |||
| |- | |||
| | 0x10050084 | |||
| | ? | |||
| | ? | |||
| |- | |||
| | 0x10070102 | |||
| | ? | |||
| | ? | |||
| |} | |||
| = Socket privileged service "soc:P" = | |||
| There can be up to 3 sessions of this service. | |||
| {| class="wikitable" border="1" | |||
| |- | |||
| !  Command Header | |||
| !  Description | |||
| |- | |||
| | 0x00010084 | |||
| | [[SOCP:InitializeSockets|InitializeSockets]] | |||
| |- | |||
| | 0x00020000 | |||
| | [[SOCP:FinalizeSockets|FinalizeSockets]] | |||
| |- | |||
| | 0x000300C2 | |||
| | [[SOCP:SetNetworkOpt|SetNetworkOpt]] | |||
| |- | |||
| | 0x00040040 | |||
| | [[SOCP:CloseSocketsForProcess|CloseSocketsForProcess]] | |||
| |- | |||
| | 0x000500C0 | |||
| |  | |||
| |- | |||
| | 0x00060000 | |||
| | [[SOCP:gethostid|gethostid]] | |||
| |- | |||
| | 0x00070000 | |||
| |  | |||
| |- | |||
| | 0x00080000 | |||
| |  | |||
| |- | |||
| | 0x00090000 | |||
| | [[SOCP:StopInitializeSockets|StopInitializeSockets]] | |||
| |} | |} | ||
| Line 72: | Line 224: | ||
| |} | |} | ||
| The total buffer size is 0x8, for family AF_INET value 2. AF_INET6 seems to be value 23, the total sockaddr size for this is 0x1C. | The total buffer size is 0x8, for family AF_INET value 2. AF_INET6 seems to be value 23, the total sockaddr size for this is 0x1C. The max sockaddr buffer size which the socket module can handle is size 0x1C. | ||
| These socket services(and defines/structures) seem to be based on the Wii sockets? | |||
| =Socket module errors= | |||
| {| class="wikitable" border="1" | |||
| |- | |||
| !  Error | |||
| !  Description | |||
| |- | |||
| | 0xC8A07004 | |||
| | This is returned when trying to use a socket descriptor from a different process. | |||
| |- | |||
| | 0xC8A07009 | |||
| | Network dropped connection on reset? (Translated from ENETRESET error) | |||
| |- | |||
| | 0xC8A0700B | |||
| | [[SOCU:InitializeSockets]] returns this when the specified PID was already used with [[SOCU:InitializeSockets]](since the PID was found in SOC module state table). | |||
| |- | |||
| | 0xD860700A | |||
| | [[SOCU:InitializeSockets]] returns this when the PID table is already full(32 processes max). | |||
| |- | |||
| | 0xD8E07006 | |||
| | Not initialized. This is returned when [[SOCU:InitializeSockets]] has not been run. | |||
| |- | |||
| | 0xD8E07007 | |||
| | The given socket descriptor does not exist. | |||
| |} | |||
| =Socket module static buffers= | |||
| This is the list of the known thread static buffers in use for SOC:u and the commands using those. | |||
| {| class="wikitable" border="1" | |||
| |- | |||
| !  buffer ID | |||
| !  commands | |||
| |- | |||
| | 0 | |||
| | bind,connect | |||
| |- | |||
| | 1 | |||
| | sendto_other,sendto | |||
| |- | |||
| | 2 | |||
| | sendto | |||
| |- | |||
| | 5-7 | |||
| | getaddrinfo | |||
| |- | |||
| | 8 | |||
| | getnameinfo | |||
| |- | |||
| | 9 | |||
| | setsockopt | |||
| |- | |||
| | 10 | |||
| | poll | |||
| |} | |||
| =IPV6= | |||
| It seems that Nintendo planned ahead and included IPv6 support to some extent in their code. | |||
| Name resolution functions support IPv6 (such as [[SOCU:getnameinfo|getnameinfo]]), but [[SOCU:socket|socket]] doesn't. | |||
| The ipv6 sockaddr size is 0x1C and is required for some IPC commands, even when using sockaddr_in which in reality is of size 8. | |||
| The sockaddr_in6 struct is the following: | |||
|  struct in6_addr | |||
|  { | |||
|  	uint8_t s6_addr[16]; | |||
|  }; | |||
|  struct sockaddr_in6 | |||
|  { | |||
|      sa_family_t     sin6_family; | |||
|      in_port_t       sin6_port; | |||
|      struct in6_addr sin6_addr; | |||
|      u32             sin6_flowinfo; // Not confirmed | |||
|      u32             sin6_scope_id; // Not confirmed | |||
|  }; | |||