页首

C库之sys/socket.h

The Single UNIX ® Specification, Version 2
Copyright © 1997 The Open Group

NAME

sys/socket.h - Internet Protocol family

SYNOPSIS



#include <sys/socket.h>

DESCRIPTION

<sys/socket.h> makes available a type, socklen_t, which is an unsigned opaque integral type of length of at least 32 bits. To forestall portability problems, it is recommended that applications should not use values larger than 232 - 1.

The <sys/socket.h> header defines the unsigned integral type sa_family_t.

The <sys/socket.h> header defines the sockaddr structure that includes at least the following members:


sa_family_t   sa_family       address family
char          sa_data[]       socket address (variable-length data)

The <sys/socket.h> header defines the msghdr structure that includes at least the following members:

void         *msg_name        optional address
socklen_t     msg_namelen     size of address
struct iovec *msg_iov         scatter/gather array
int           msg_iovlen      members in msg_iov
void         *msg_control     ancillary data, see below
socklen_t     msg_controllen  ancillary data buffer len
int           msg_flags       flags on received message

The <sys/socket.h> header defines the cmsghdr structure that includes at least the following members:

socklen_t     cmsg_len        data byte count, including the cmsghdr
int           cmsg_level      originating protocol
int           cmsg_type       protocol-specific type

Ancillary data consists of a sequence of pairs, each consisting of a cmsghdr structure followed by a data array. The data array contains the ancillary data message, and the cmsghdr structure contains descriptive information that allows an application to correctly parse the data.

The values for cmsg_level will be legal values for the level argument to the getsockopt() and setsockopt() functions. The system documentation should specify the cmsg_type definitions for the supported protocols.

Ancillary data is also possible at the socket level. The <sys/socket.h> header defines the following macro for use as the cmsg_type value when cmsg_level is SOL_SOCKET:

SCM_RIGHTS
Indicates that the data array contains the access rights to be sent or received.

The <sys/socket.h> header defines the following macros to gain access to the data arrays in the ancillary data associated with a message header:

CMSG_DATA(cmsg)
If the argument is a pointer to a cmsghdr structure, this macro returns an unsigned character pointer to the data array associated with the cmsghdrstructure.
CMSG_NXTHDR(mhdr,cmsg)

If the first argument is a pointer to a msghdr structure and the second argument is a pointer to a cmsghdr structure in the ancillary data, pointed to by the msg_control field of that msghdr structure, this macro returns a pointer to the next cmsghdr structure, or a null pointer if this structure is the lastcmsghdr in the ancillary data.
CMSG_FIRSTHDR(mhdr)

If the argument is a pointer to a msghdr structure, this macro returns a pointer to the first cmsghdr structure in the ancillary data associated with thismsghdr structure, or a null pointer if there is no ancillary data associated with the msghdr structure.

The <sys/socket.h> header defines the linger structure that includes at least the following members:


int         l_onoff          indicates whether linger option is enabled
int         l_linger         linger time, in seconds

The <sys/socket.h> header defines the following macros, with distinct integral values:
SOCK_DGRAM
Datagram socket
SOCK_STREAM
Byte-stream socket
SOCK_SEQPACKET
Sequenced-packet socket

The <sys/socket.h> header defines the following macro for use as the level argument of setsockopt() and getsockopt().

SOL_SOCKET
Options to be accessed at socket level, not protocol level.

The <sys/socket.h> header defines the following macros, with distinct integral values, for use as the option_name argument in getsockopt() or setsockopt()calls:

SO_ACCEPTCONN
Socket is accepting connections.
SO_BROADCAST
Transmission of broadcast messages is supported.
SO_DEBUG
Debugging information is being recorded.
SO_DONTROUTE
bypass normal routing
SO_ERROR
Socket error status.
SO_KEEPALIVE
Connections are kept alive with periodic messages.
SO_LINGER
Socket lingers on close.
SO_OOBINLINE
Out-of-band data is transmitted in line.
SO_RCVBUF
Receive buffer size.
SO_RCVLOWAT
receive "low water mark"
SO_RCVTIMEO
receive timeout
SO_REUSEADDR
Reuse of local addresses is supported.
SO_SNDBUF
Send buffer size.
SO_SNDLOWAT
send "low water mark"
SO_SNDTIMEO
send timeout
SO_TYPE
Socket type.

The <sys/socket.h> header defines the following macros, with distinct integral values, for use as the valid values for the msg_flags field in the msghdrstructure, or the flags parameter in recvfrom()recvmsg()sendto() or sendmsg() calls:

MSG_CTRUNC
Control data truncated.
MSG_DONTROUTE
Send without using routing tables.
MSG_EOR
Terminates a record (if supported by the protocol).
MSG_OOB
Out-of-band data.
MSG_PEEK
Leave received data in queue.
MSG_TRUNC
Normal data truncated.
MSG_WAITALL
Wait for complete message.

The <sys/socket.h> header defines the following macros, with distinct integral values:

AF_UNIX
UNIX domain sockets
AF_UNSPEC
Unspecified
AF_INET
Internet domain sockets

The <sys/socket.h> header defines the following macros, with distinct integral values:

SHUT_RD
Disables further receive operations.
SHUT_WR
Disables further send operations.
SHUT_RDWR
Disables further send and receive operations.

The following are declared as functions, and may also be defined as macros:


int     accept(int socket, struct sockaddr *address,
             socklen_t *address_len);
int     bind(int socket, const struct sockaddr *address,
             socklen_t address_len);
int     connect(int socket, const struct sockaddr *address,
             socklen_t address_len);
int     getpeername(int socket, struct sockaddr *address,
             socklen_t *address_len);
int     getsockname(int socket, struct sockaddr *address,
             socklen_t *address_len);
int     getsockopt(int socket, int level, int option_name,
             void *option_value, socklen_t *option_len);
int     listen(int socket, int backlog);
ssize_t recv(int socket, void *buffer, size_t length, int flags);
ssize_t recvfrom(int socket, void *buffer, size_t length,
             int flags, struct sockaddr *address, socklen_t *address_len);
ssize_t recvmsg(int socket, struct msghdr *message, int flags);
ssize_t send(int socket, const void *message, size_t length, int flags);
ssize_t sendmsg(int socket, const struct msghdr *message, int flags);
ssize_t sendto(int socket, const void *message, size_t length, int flags,
             const struct sockaddr *dest_addr, socklen_t dest_len);
int     setsockopt(int socket, int level, int option_name,
             const void *option_value, socklen_t option_len);
int     shutdown(int socket, int how);
int     socket(int domain, int type, int protocol);
int     socketpair(int domain, int type, int protocol,
             int socket_vector[2]);

SEE ALSO

accept()bind()connect()getpeername()getsockname()getsockopt()listen()recv()recvfrom()recvmsg()send()sendmsg()sendto()setsockopt(),shutdown()socket()socketpair().

UNIX ® is a registered Trademark of The Open Group.
Copyright © 1997 The Open Group 
Main Index | XSH | XCU | XBD | XCURSES | XNS ]

posted @ 2018-02-13 21:45  zhangrxiang  阅读(4408)  评论(0编辑  收藏  举报

页脚