Changes

Jump to navigation Jump to search
3,319 bytes added ,  22:15, 20 February 2016
Line 1: Line 1:  
[[Category:Services]]
 
[[Category:Services]]
= Socket service "soc:U" =
+
= Socket user service "soc:U" =
 
{| 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
 +
|
 +
| [[SOCU:close|close]]
 +
|-
 +
| 0x000C0082
 +
|
 +
| [[SOCU:shutdown|shutdown]]
 
|-
 
|-
 
| 0x000D0082
 
| 0x000D0082
| This is used for DNS like command 0x000F00C2.
+
|  
 +
| [[SOCU:gethostbyname|gethostbyname]]
 +
|-
 +
| 0x000E00C2
 +
|
 +
| [[SOCU:gethostbyaddr|gethostbyaddr]]
 +
|-
 +
| 0x000F0106
 +
|
 +
| [[SOCU:getaddrinfo|getaddrinfo]]
 +
|-
 +
| 0x00100102
 +
|
 +
| [[SOCU:getnameinfo|getnameinfo]]
 
|-
 
|-
| 0x000F00C2
+
| 0x00110102
| This resolves the IP address(es) for the specified host-name.
+
|  
 +
| [[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
 +
|
 +
| ?
 +
|-
 +
| 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" =
 +
{| 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 69: Line 218:  
|}
 
|}
   −
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
 +
|-
 +
| 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).
 +
|}
 +
 
 +
=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
 +
};

Navigation menu