Difference between revisions of "SOCU:poll"

From 3dbrew
Jump to navigation Jump to search
(Created page with "=Request= {| class="wikitable" border="1" |- ! Index Word ! Description |- | 0 | Header code [0x00140084] |- | 1 | nfds_t nfds |- | 2 | int timeout |- | 3 | Value 0x20 (process...")
 
Line 24: Line 24:
 
|-
 
|-
 
| 6
 
| 6
| Input fds struct ptr
+
| Pointer to input pollfd struct array
 
|}
 
|}
  
Line 37: Line 37:
 
|-
 
|-
 
| 1
 
| 1
| Output fds struct ptr
+
| Pointer to output pollfd struct array
 
|}
 
|}
  
Line 54: Line 54:
 
| 2
 
| 2
 
| POSIX return value
 
| POSIX return value
 +
|}
 +
 +
=pollfd struct=
 +
{| class="wikitable" border="1"
 +
|-
 +
! Type
 +
! Name
 +
! Description
 +
|-
 +
| u32
 +
| fd
 +
| Socket handle
 +
|-
 +
| u32
 +
| events
 +
| Events to poll for (input)
 +
|-
 +
| u32
 +
| revents
 +
| Events received (output)
 +
|}
 +
 +
=Events=
 +
Events are a bitwise set of these flags.
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value
 +
! Name
 +
! Input/Output
 +
! Description
 +
|-
 +
| 0x01
 +
| POLLIN
 +
| Both
 +
| Can recv() data from socket without blocking. For listen sockets, this means you can accept() a connection without blocking.
 +
|-
 +
| 0x02
 +
| POLLPRI
 +
| Both
 +
| There is OOB data ready to recv(). Appears that recv()'ing without OOB flag still reads OOB data?
 +
|-
 +
| 0x04
 +
| ???
 +
| ???
 +
| Have never seen this flag. Could possibly be POLLHUP (need to test).
 +
|-
 +
| 0x08
 +
| ???
 +
| ???
 +
| This flag is almost always set when requested.
 +
|-
 +
| 0x10
 +
| POLLOUT
 +
| Both
 +
| Can send() data to socket without blocking. For a non-blocking connect(), this means the connection has completed (need to test).
 +
|-
 +
| 0x20
 +
| POLLNVAL
 +
| Out
 +
| Invalid socket handle. This is set if you use fd=-1, which is non-standard behavior.
 +
|-
 +
| ???
 +
| POLLERR
 +
| Out
 +
| Socket error.
 +
|-
 +
| ???
 +
| POLLHUP
 +
| Out
 +
| Socket has been disconnected.
 
|}
 
|}

Revision as of 20:04, 8 December 2014

Request

Index Word Description
0 Header code [0x00140084]
1 nfds_t nfds
2 int timeout
3 Value 0x20 (processID header)
4 ProcessID set by the ARM11 kernel.
5 (insize<<14) | 0x2802
6 Pointer to input pollfd struct array

The following is located 0x100-bytes after the beginning of the above command buffer:

Index Word Description
0 (outsize<<14) | 2
1 Pointer to output pollfd struct array

Response

Index Word Description
0 Header code
1 Result code
2 POSIX return value

pollfd struct

Type Name Description
u32 fd Socket handle
u32 events Events to poll for (input)
u32 revents Events received (output)

Events

Events are a bitwise set of these flags.

Value Name Input/Output Description
0x01 POLLIN Both Can recv() data from socket without blocking. For listen sockets, this means you can accept() a connection without blocking.
0x02 POLLPRI Both There is OOB data ready to recv(). Appears that recv()'ing without OOB flag still reads OOB data?
0x04 ??? ??? Have never seen this flag. Could possibly be POLLHUP (need to test).
0x08 ??? ??? This flag is almost always set when requested.
0x10 POLLOUT Both Can send() data to socket without blocking. For a non-blocking connect(), this means the connection has completed (need to test).
0x20 POLLNVAL Out Invalid socket handle. This is set if you use fd=-1, which is non-standard behavior.
??? POLLERR Out Socket error.
??? POLLHUP Out Socket has been disconnected.