aboutsummaryrefslogtreecommitdiffstats
path: root/sys/socket.txt
diff options
context:
space:
mode:
authorAndrey Konovalov <andreyknvl@gmail.com>2017-04-20 17:59:37 +0200
committerGitHub <noreply@github.com>2017-04-20 17:59:37 +0200
commit3e9ca9af331c24d56d701c749d25452d2a68e943 (patch)
treed7582b1486c780f3f3bb76c3d7e7b646d75907a5 /sys/socket.txt
parent61c890d8ffd6981f2652871649d555136e70823a (diff)
parent2b029e3da8c12e1734dfd8aa96b8ff45765dc79a (diff)
Merge pull request #165 from xairy/better-sockets
Improve socket options
Diffstat (limited to 'sys/socket.txt')
-rw-r--r--sys/socket.txt83
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