/* * As we do 4.4BSD message passing we use a 4.4BSD message passing * system, not 4.3. Thus msg_accrights(len) are now missing. They * belong in an obscure libc emulation or the bin.
*/
struct msghdr { void *msg_name; /* ptr to socket address structure */ int msg_namelen; /* size of socket address structure */
int msg_inq; /* output, data left in socket */
struct iov_iter msg_iter; /* data */
/* * Ancillary data. msg_control_user is the user buffer used for the * recv* side when msg_control_is_user is set, msg_control is the kernel * buffer used for all other cases.
*/ union { void *msg_control; void __user *msg_control_user;
}; bool msg_control_is_user : 1; bool msg_get_inq : 1;/* return INQ after receive */ unsignedint msg_flags; /* flags on received message */
__kernel_size_t msg_controllen; /* ancillary data buffer length */ struct kiocb *msg_iocb; /* ptr to iocb for async requests */ struct ubuf_info *msg_ubuf; int (*sg_from_iter)(struct sk_buff *skb, struct iov_iter *from, size_t length);
};
struct user_msghdr { void __user *msg_name; /* ptr to socket address structure */ int msg_namelen; /* size of socket address structure */ struct iovec __user *msg_iov; /* scatter/gather array */
__kernel_size_t msg_iovlen; /* # elements in msg_iov */ void __user *msg_control; /* ancillary data */
__kernel_size_t msg_controllen; /* ancillary data buffer length */ unsignedint msg_flags; /* flags on received message */
};
/* * POSIX 1003.1g - ancillary data object information * Ancillary data consists of a sequence of pairs of * (cmsghdr, cmsg_data[])
*/
struct cmsghdr {
__kernel_size_t cmsg_len; /* data byte count, including hdr */ int cmsg_level; /* originating protocol */ int cmsg_type; /* protocol-specific type */
};
/* * Ancillary data object information MACROS * Table 5-14 of POSIX 1003.1g
*/
/* * Get the next cmsg header * * PLEASE, do not touch this function. If you think, that it is * incorrect, grep kernel sources and think about consequences * before trying to improve it. * * Now it always returns valid, not truncated ancillary object * HEADER. But caller still MUST check, that cmsg->cmsg_len is * inside range, given by msg->msg_controllen before using * ancillary object DATA. --ANK (980731)
*/
/* Maximum queue length specifiable by listen. */ #define SOMAXCONN 4096
/* Flags we can use with send/ and recv. Added those for 1003.1g not all are supported yet
*/
#define MSG_OOB 1 #define MSG_PEEK 2 #define MSG_DONTROUTE 4 #define MSG_TRYHARD 4 /* Synonym for MSG_DONTROUTE for DECnet */ #define MSG_CTRUNC 8 #define MSG_PROBE 0x10 /* Do not send. Only probe path f.e. for MTU */ #define MSG_TRUNC 0x20 #define MSG_DONTWAIT 0x40 /* Nonblocking io */ #define MSG_EOR 0x80 /* End of record */ #define MSG_WAITALL 0x100 /* Wait for a full request */ #define MSG_FIN 0x200 #define MSG_SYN 0x400 #define MSG_CONFIRM 0x800 /* Confirm path validity */ #define MSG_RST 0x1000 #define MSG_ERRQUEUE 0x2000 /* Fetch message from error queue */ #define MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */ #define MSG_MORE 0x8000 /* Sender will send more */ #define MSG_WAITFORONE 0x10000 /* recvmmsg(): block until 1+ packets avail */ #define MSG_SENDPAGE_NOPOLICY 0x10000 /* sendpage() internal : do no apply policy */ #define MSG_BATCH 0x40000 /* sendmmsg(): more messages coming */ #define MSG_EOF MSG_FIN #define MSG_NO_SHARED_FRAGS 0x80000 /* sendpage() internal : page frags are not shared */ #define MSG_SENDPAGE_DECRYPTED 0x100000 /* sendpage() internal : page may carry * plain text and require encryption
*/
#define MSG_SOCK_DEVMEM 0x2000000 /* Receive devmem skbs as cmsg */ #define MSG_ZEROCOPY 0x4000000 /* Use user data in kernel path */ #define MSG_SPLICE_PAGES 0x8000000 /* Splice the pages from the iterator in sendmsg() */ #define MSG_FASTOPEN 0x20000000 /* Send data in TCP SYN */ #define MSG_CMSG_CLOEXEC 0x40000000 /* Set close_on_exec for file descriptor received through
SCM_RIGHTS */ #ifdefined(CONFIG_COMPAT) #define MSG_CMSG_COMPAT 0x80000000 /* This message needs 32 bit fixups */ #else #define MSG_CMSG_COMPAT 0 /* We never have 32 bit fixups */ #endif
/* Flags to be cleared on entry by sendmsg and sendmmsg syscalls */ #define MSG_INTERNAL_SENDMSG_FLAGS \
(MSG_SPLICE_PAGES | MSG_SENDPAGE_NOPOLICY | MSG_SENDPAGE_DECRYPTED)
externint move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr); externint put_cmsg(struct msghdr*, int level, int type, int len, void *data); externint put_cmsg_notrunc(struct msghdr *msg, int level, int type, int len, void *data);
/* helpers which do the actual work for syscalls */ externint __sys_recvfrom(int fd, void __user *ubuf, size_t size, unsignedint flags, struct sockaddr __user *addr, int __user *addr_len); externint __sys_sendto(int fd, void __user *buff, size_t len, unsignedint flags, struct sockaddr __user *addr, int addr_len); externstruct file *do_accept(struct file *file, struct proto_accept_arg *arg, struct sockaddr __user *upeer_sockaddr, int __user *upeer_addrlen, int flags); externint __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr, int __user *upeer_addrlen, int flags); externint __sys_socket(int family, int type, int protocol); externstruct file *__sys_socket_file(int family, int type, int protocol); externint __sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen); externint __sys_bind_socket(struct socket *sock, struct sockaddr_storage *address, int addrlen); externint __sys_connect_file(struct file *file, struct sockaddr_storage *addr, int addrlen, int file_flags); externint __sys_connect(int fd, struct sockaddr __user *uservaddr, int addrlen); externint __sys_listen(int fd, int backlog); externint __sys_listen_socket(struct socket *sock, int backlog); externint __sys_getsockname(int fd, struct sockaddr __user *usockaddr, int __user *usockaddr_len); externint __sys_getpeername(int fd, struct sockaddr __user *usockaddr, int __user *usockaddr_len); externint __sys_socketpair(int family, int type, int protocol, int __user *usockvec); externint __sys_shutdown_sock(struct socket *sock, int how); externint __sys_shutdown(int fd, int how); #endif/* _LINUX_SOCKET_H */
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.78Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.