diff options
| author | Andrey Konovalov <andreyknvl@gmail.com> | 2017-04-20 17:59:37 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-04-20 17:59:37 +0200 |
| commit | 3e9ca9af331c24d56d701c749d25452d2a68e943 (patch) | |
| tree | d7582b1486c780f3f3bb76c3d7e7b646d75907a5 /sys/socket.txt | |
| parent | 61c890d8ffd6981f2652871649d555136e70823a (diff) | |
| parent | 2b029e3da8c12e1734dfd8aa96b8ff45765dc79a (diff) | |
Merge pull request #165 from xairy/better-sockets
Improve socket options
Diffstat (limited to 'sys/socket.txt')
| -rw-r--r-- | sys/socket.txt | 83 |
1 files changed, 47 insertions, 36 deletions
diff --git a/sys/socket.txt b/sys/socket.txt index 686b6aee1..13002b6b6 100644 --- a/sys/socket.txt +++ b/sys/socket.txt @@ -16,32 +16,33 @@ resource sock[fd] socket(domain flags[socket_domain], type flags[socket_type], proto int8) sock socketpair(domain flags[socket_domain], type flags[socket_type], proto int8, fds ptr[out, pipefd]) -bind(fd sock, addr ptr[in, sockaddr_all], addrlen len[addr]) -connect(fd sock, addr ptr[in, sockaddr_all], addrlen len[addr]) -accept(fd sock, peer ptr[out, sockaddr_all, opt], peerlen ptr[inout, len[peer, int32]]) sock -accept4(fd sock, peer ptr[out, sockaddr_all, opt], peerlen ptr[inout, len[peer, int32]], flags flags[accept_flags]) sock -sendto(fd sock, buf buffer[in], len len[buf], f flags[send_flags], addr ptr[in, sockaddr_all, opt], addrlen len[addr]) -recvfrom(fd sock, buf buffer[out], len len[buf], f flags[recv_flags], addr ptr[in, sockaddr_all, opt], addrlen len[addr]) -getsockname(fd sock, addr ptr[out, sockaddr_all], addrlen ptr[inout, len[addr, int32]]) -getpeername(fd sock, peer ptr[out, sockaddr_all], peerlen ptr[inout, len[peer, int32]]) +bind(fd sock, addr ptr[in, sockaddr_storage], addrlen len[addr]) +connect(fd sock, addr ptr[in, sockaddr_storage], addrlen len[addr]) +accept(fd sock, peer ptr[out, sockaddr_storage, opt], peerlen ptr[inout, len[peer, int32]]) sock +accept4(fd sock, peer ptr[out, sockaddr_storage, opt], peerlen ptr[inout, len[peer, int32]], flags flags[accept_flags]) sock +sendto(fd sock, buf buffer[in], len len[buf], f flags[send_flags], addr ptr[in, sockaddr_storage, opt], addrlen len[addr]) +recvfrom(fd sock, buf buffer[out], len len[buf], f flags[recv_flags], addr ptr[in, sockaddr_storage, opt], addrlen len[addr]) +getsockname(fd sock, addr ptr[out, sockaddr_storage], addrlen ptr[inout, len[addr, int32]]) +getpeername(fd sock, peer ptr[out, sockaddr_storage], peerlen ptr[inout, len[peer, int32]]) -listen(fd sock, backlog int32) -shutdown(fd sock, how flags[shutdown_flags]) sendmsg(fd sock, msg ptr[in, send_msghdr], f flags[send_flags]) -sendmmsg(fd sock, mmsg ptr[in, array[send_msghdr]], vlen len[mmsg], f flags[send_flags]) +sendmmsg(fd sock, mmsg ptr[in, array[send_mmsghdr]], vlen len[mmsg], f flags[send_flags]) recvmsg(fd sock, msg ptr[in, recv_msghdr], f flags[recv_flags]) -recvmmsg(fd sock, mmsg ptr[in, array[recv_msghdr]], vlen len[mmsg], f flags[recv_flags]) +recvmmsg(fd sock, mmsg ptr[in, array[recv_mmsghdr]], vlen len[mmsg], f flags[recv_flags]) + +listen(fd sock, backlog int32) +shutdown(fd sock, how flags[shutdown_flags]) getsockopt(fd sock, level int32, optname int32, optval buffer[out], optlen ptr[inout, len[optval, int32]]) setsockopt(fd sock, level int32, optname int32, optval buffer[in], optlen len[optval]) socket_domain = AF_UNIX, AF_INET, AF_INET6, AF_IPX, AF_NETLINK, AF_X25, AF_AX25, AF_ATMPVC, AF_APPLETALK, AF_PACKET -socket_type = SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET, SOCK_RAW, SOCK_RDM, SOCK_PACKET, SOCK_NONBLOCK, SOCK_CLOEXEC +socket_type = SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_RDM, SOCK_SEQPACKET, SOCK_DCCP, SOCK_PACKET, SOCK_NONBLOCK, SOCK_CLOEXEC accept_flags = SOCK_NONBLOCK, SOCK_CLOEXEC shutdown_flags = SHUT_RD, SHUT_WR send_flags = MSG_CONFIRM, MSG_DONTROUTE, MSG_DONTWAIT, MSG_EOR, MSG_MORE, MSG_NOSIGNAL, MSG_OOB, MSG_PROBE, MSG_BATCH, MSG_FASTOPEN recv_flags = MSG_CMSG_CLOEXEC, MSG_DONTWAIT, MSG_ERRQUEUE, MSG_OOB, MSG_PEEK, MSG_TRUNC, MSG_WAITALL, MSG_WAITFORONE -sock_level = IPPROTO_ICMP, SOL_IP, SOL_TCP, SOL_UDP, SOL_IPV6, SOL_ICMPV6, SOL_SCTP, SOL_UDPLITE, SOL_RAW, SOL_IPX, SOL_AX25, SOL_ATALK, SOL_NETROM, SOL_ROSE, SOL_DECNET, SOL_PACKET, SOL_ATM, SOL_AAL, SOL_IRDA, SOL_NETBEUI, SOL_LLC, SOL_DCCP, SOL_NETLINK, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE, SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM +cmsg_levels = SOL_SOCKET, IPPROTO_ICMP, SOL_IP, SOL_TCP, SOL_UDP, SOL_IPV6, SOL_ICMPV6, SOL_SCTP, SOL_UDPLITE, SOL_RAW, SOL_IPX, SOL_AX25, SOL_ATALK, SOL_NETROM, SOL_ROSE, SOL_DECNET, SOL_PACKET, SOL_ATM, SOL_AAL, SOL_IRDA, SOL_NETBEUI, SOL_LLC, SOL_DCCP, SOL_NETLINK, SOL_TIPC, SOL_RXRPC, SOL_PPPOL2TP, SOL_BLUETOOTH, SOL_PNPIPE, SOL_RDS, SOL_IUCV, SOL_CAIF, SOL_ALG, SOL_NFC, SOL_KCM # This sockaddr type corresponds to the struct sockaddr and is 16 bytes or less. sockaddr [ @@ -86,8 +87,8 @@ sockaddr [ generic sockaddr_generic ] -# This sockaddr can be of arbitrary size and it's meant to be passed as a pointer. -sockaddr_all [ +# This sockaddr type corresponds to the sockaddr_storage type and is 128 bytes size. +sockaddr_storage [ un sockaddr_un in sockaddr_in ax25 sockaddr_ax25 @@ -127,7 +128,7 @@ sockaddr_all [ # TODO: AF_VSOCK # TODO: AF_QIPCRTR ethernet sockaddr_ethernet - generic sockaddr_all_generic + generic sockaddr_storage_generic ] [varlen] sockaddr_generic { @@ -135,36 +136,46 @@ sockaddr_generic { sa_data array[int8, 14] } -sockaddr_all_generic { +sockaddr_storage_generic { sa_family flags[socket_domain, int16] sa_data array[int8, 126] } send_msghdr { - addr ptr[in, sockaddr_all, opt] - addrlen len[addr, int32] - vec ptr[in, array[iovec_in]] - vlen len[vec, intptr] - ctrl ptr[in, array[cmsghdr]] - ctrllen len[ctrl, intptr] - f flags[send_flags, int32] + msg_name ptr[in, sockaddr_storage, opt] + msg_namelen len[msg_name, int32] + msg_iov ptr[in, array[iovec_in]] + msg_iovlen len[msg_iov, intptr] + msg_control ptr[in, array[cmsghdr]] + msg_controllen len[msg_control, intptr] + msg_flags flags[send_flags, int32] +} + +send_mmsghdr { + msg_hdr send_msghdr + msg_len int32 } recv_msghdr { - addr ptr[out, sockaddr_all, opt] - addrlen len[addr, int32] - vec ptr[in, array[iovec_out]] - vlen len[vec, intptr] - ctrl buffer[out] - ctrllen len[ctrl, intptr] - f int32 + msg_name ptr[out, sockaddr_storage, opt] + msg_namelen len[msg_name, int32] + msg_iov ptr[in, array[iovec_out]] + msg_iovlen len[msg_iov, intptr] + msg_control buffer[out] + msg_controllen len[msg_control, intptr] + msg_flags int32 +} + +recv_mmsghdr { + msg_hdr recv_msghdr + msg_len int32 } cmsghdr { - len len[parent, intptr] - level flags[sock_level, int32] - type int32 - data array[int8] + cmsg_len len[parent, intptr] + cmsg_level flags[cmsg_levels, int32] + cmsg_type int32 + data array[int8] } [align_ptr] # Socket options |
