Difference between revisions of "SOCU:poll"
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 | ||
− | | | + | | Pointer to input pollfd struct array |
|} | |} | ||
Line 37: | Line 37: | ||
|- | |- | ||
| 1 | | 1 | ||
− | | | + | | 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 19: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. |