Sockets services: Difference between revisions
Document SocketExempt, sysctl, ioctl, fcntl + some refactoring |
|||
Line 12: | Line 12: | ||
| 2 || Socket | | 2 || Socket | ||
|- | |- | ||
| 3 || SocketExempt | | 3 || [[#SocketExempt]] | ||
|- | |- | ||
| 4 || Open | | 4 || [[#Open]] | ||
|- | |- | ||
| 5 || Select | | 5 || Select | ||
Line 20: | Line 20: | ||
| 6 || Poll | | 6 || Poll | ||
|- | |- | ||
| 7 || Sysctl | | 7 || [[#Sysctl]] | ||
|- | |- | ||
| 8 || Recv | | 8 || Recv | ||
Line 44: | Line 44: | ||
| 18 || Listen | | 18 || Listen | ||
|- | |- | ||
| 19 || Ioctl | | 19 || [[#Ioctl]] | ||
|- | |- | ||
| 20 || Fcntl | | 20 || [[#Fcntl]] | ||
|- | |- | ||
| 21 || SetSockOpt | | 21 || SetSockOpt | ||
Line 68: | Line 68: | ||
| 30 || [3.0.0+] SendMMsg | | 30 || [3.0.0+] SendMMsg | ||
|} | |} | ||
== Initalize == | == Initalize == | ||
Line 95: | Line 93: | ||
The transfer memory must be larger than a the computed size below. Should the transfer memory be smaller than that, the BSD sockets service would only send ZeroWindow packets (for TCP), resulting in a transfer rate not exceeding 1 byte/s. | The transfer memory must be larger than a the computed size below. Should the transfer memory be smaller than that, the BSD sockets service would only send ZeroWindow packets (for TCP), resulting in a transfer rate not exceeding 1 byte/s. | ||
static size_t | static size_t _bsdGetTransferMemSizeForBufferConfig(const BsdBufferConfig *config) | ||
{ | { | ||
u32 tcp_tx_buf_max_size = config->tcp_tx_buf_max_size != 0 ? config->tcp_tx_buf_max_size : config->tcp_tx_buf_size; | u32 tcp_tx_buf_max_size = config->tcp_tx_buf_max_size != 0 ? config->tcp_tx_buf_max_size : config->tcp_tx_buf_size; | ||
Line 104: | Line 102: | ||
return (size_t)(config->sb_efficiency * sum); | return (size_t)(config->sb_efficiency * sum); | ||
} | } | ||
== SocketExempt == | |||
This command is exclusive to <code>bsd:s</code> (FIXME: test whether this is actually the case). | |||
Performs a FIONBIO <code>ioctl</code> on the socket, making it non-blocking. POSIX-compliant code should use <code>fcntl</code> instead. | |||
== Open == | |||
FreeBSD's <code>open</code> command, limited to opening <code>/dev/bpf</code>. This can be used, for example, to enable promiscuous mode, see FreeBSD's <code>/dev/bpf</code> for more details. | |||
== Sysctl == | |||
This command is exclusive to <code>bsd:s</code> (FIXME: test whether this is actually the case). | |||
FreeBSD's <code>sysctl</code> command, restricted to <code>CTL_NET</code> (?). | |||
== Ioctl == | |||
FreeBSD's <code>ioctl</code> function. The following ioctls are implemented, refer to FreeBSD's headers for more details: SIOCATMARK, BIOCGBLEN, BIOCIMMEDIATE, BIOCSETIF, SIOCGETSGCNT, SIOCGIFMETRIC, SIOCSIFMETRIC SIOCDIFADDR, SIOCGIFINDEX, SIOCGIFADDR, SIOCGIFCONF, SIOCGIFNETMASK, SIOCGIFMTU, SIOCSIFMTU, SIOCGIFMEDIA, SIOCSIFLLADDR and SIOCGIFXMEDIA. | |||
== Fcntl == | |||
FreeBSD's <code>fcntl</code>, limited to <code>F_GETFL</code> and <code>F_SETFL</code> with <code>O_NONBLOCK</code>. | |||
= sfdnsres = | = sfdnsres = |