📄 sock.h
字号:
/**
* Set the port number of an Internet socket address.
*
* @param addr The IP socket address.
* @param hostport The port number, in host byte order.
*/
PJ_INLINE(void) pj_sockaddr_in_set_port(pj_sockaddr_in *addr,
pj_uint16_t hostport)
{
addr->sin_port = pj_htons(hostport);
}
/**
* Get the IP address of an Internet socket address.
* The address is returned as 32bit value in host byte order.
*
* @param addr The IP socket address.
* @return 32bit address, in host byte order.
*/
PJ_INLINE(pj_in_addr) pj_sockaddr_in_get_addr(const pj_sockaddr_in *addr)
{
pj_in_addr in_addr;
in_addr.s_addr = pj_ntohl(addr->sin_addr.s_addr);
return in_addr;
}
/**
* Set the IP address of an Internet socket address.
*
* @param addr The IP socket address.
* @param hostaddr The host address, in host byte order.
*/
PJ_INLINE(void) pj_sockaddr_in_set_addr(pj_sockaddr_in *addr,
pj_uint32_t hostaddr)
{
addr->sin_addr.s_addr = pj_htonl(hostaddr);
}
/**
* Set the IP address of an IP socket address from string address,
* with resolving the host if necessary. The string address may be in a
* standard numbers and dots notation or may be a hostname. If hostname
* is specified, then the function will resolve the host into the IP
* address.
*
* @param addr The IP socket address to be set.
* @param cp The address string, which can be in a standard
* dotted numbers or a hostname to be resolved.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sockaddr_in_set_str_addr( pj_sockaddr_in *addr,
const pj_str_t *cp);
/**
* Set the IP address and port of an IP socket address.
* The string address may be in a standard numbers and dots notation or
* may be a hostname. If hostname is specified, then the function will
* resolve the host into the IP address.
*
* @param addr The IP socket address to be set.
* @param cp The address string, which can be in a standard
* dotted numbers or a hostname to be resolved.
* @param port The port number, in host byte order.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sockaddr_in_init( pj_sockaddr_in *addr,
const pj_str_t *cp,
pj_uint16_t port);
/*****************************************************************************
*
* HOST NAME AND ADDRESS.
*
*****************************************************************************
*/
/**
* Get system's host name.
*
* @return The hostname, or empty string if the hostname can not
* be identified.
*/
PJ_DECL(const pj_str_t*) pj_gethostname(void);
/**
* Get host's IP address, which the the first IP address that is resolved
* from the hostname.
*
* @return The host's IP address, PJ_INADDR_NONE if the host
* IP address can not be identified.
*/
PJ_DECL(pj_in_addr) pj_gethostaddr(void);
/*****************************************************************************
*
* SOCKET API.
*
*****************************************************************************
*/
/**
* Create new socket/endpoint for communication.
*
* @param family Specifies a communication domain; this selects the
* protocol family which will be used for communication.
* @param type The socket has the indicated type, which specifies the
* communication semantics.
* @param protocol Specifies a particular protocol to be used with the
* socket. Normally only a single protocol exists to support
* a particular socket type within a given protocol family,
* in which a case protocol can be specified as 0.
* @param sock New socket descriptor, or PJ_INVALID_SOCKET on error.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sock_socket(int family,
int type,
int protocol,
pj_sock_t *sock);
/**
* Close the socket descriptor.
*
* @param sockfd The socket descriptor.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sock_close(pj_sock_t sockfd);
/**
* This function gives the socket sockfd the local address my_addr. my_addr is
* addrlen bytes long. Traditionally, this is called assigning a name to
* a socket. When a socket is created with #pj_sock_socket(), it exists in a
* name space (address family) but has no name assigned.
*
* @param sockfd The socket desriptor.
* @param my_addr The local address to bind the socket to.
* @param addrlen The length of the address.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sock_bind( pj_sock_t sockfd,
const pj_sockaddr_t *my_addr,
int addrlen);
/**
* Bind the IP socket sockfd to the given address and port.
*
* @param sockfd The socket descriptor.
* @param addr Local address to bind the socket to, in host byte order.
* @param port The local port to bind the socket to, in host byte order.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sock_bind_in( pj_sock_t sockfd,
pj_uint32_t addr,
pj_uint16_t port);
#if PJ_HAS_TCP
/**
* Listen for incoming connection. This function only applies to connection
* oriented sockets (such as PJ_SOCK_STREAM or PJ_SOCK_SEQPACKET), and it
* indicates the willingness to accept incoming connections.
*
* @param sockfd The socket descriptor.
* @param backlog Defines the maximum length the queue of pending
* connections may grow to.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sock_listen( pj_sock_t sockfd,
int backlog );
/**
* Accept new connection on the specified connection oriented server socket.
*
* @param serverfd The server socket.
* @param newsock New socket on success, of PJ_INVALID_SOCKET if failed.
* @param addr A pointer to sockaddr type. If the argument is not NULL,
* it will be filled by the address of connecting entity.
* @param addrlen Initially specifies the length of the address, and upon
* return will be filled with the exact address length.
*
* @return Zero on success, or the error number.
*/
PJ_DECL(pj_status_t) pj_sock_accept( pj_sock_t serverfd,
pj_sock_t *newsock,
pj_sockaddr_t *addr,
int *addrlen);
#endif
/**
* The file descriptor sockfd must refer to a socket. If the socket is of
* type PJ_SOCK_DGRAM then the serv_addr address is the address to which
* datagrams are sent by default, and the only address from which datagrams
* are received. If the socket is of type PJ_SOCK_STREAM or PJ_SOCK_SEQPACKET,
* this call attempts to make a connection to another socket. The
* other socket is specified by serv_addr, which is an address (of length
* addrlen) in the communications space of the socket. Each communications
* space interprets the serv_addr parameter in its own way.
*
* @param sockfd The socket descriptor.
* @param serv_addr Server address to connect to.
* @param addrlen The length of server address.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sock_connect( pj_sock_t sockfd,
const pj_sockaddr_t *serv_addr,
int addrlen);
/**
* Return the address of peer which is connected to socket sockfd.
*
* @param sockfd The socket descriptor.
* @param addr Pointer to sockaddr structure to which the address
* will be returned.
* @param namelen Initially the length of the addr. Upon return the value
* will be set to the actual length of the address.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sock_getpeername(pj_sock_t sockfd,
pj_sockaddr_t *addr,
int *namelen);
/**
* Return the current name of the specified socket.
*
* @param sockfd The socket descriptor.
* @param addr Pointer to sockaddr structure to which the address
* will be returned.
* @param namelen Initially the length of the addr. Upon return the value
* will be set to the actual length of the address.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sock_getsockname( pj_sock_t sockfd,
pj_sockaddr_t *addr,
int *namelen);
/**
* Get socket option associated with a socket. Options may exist at multiple
* protocol levels; they are always present at the uppermost socket level.
*
* @param sockfd The socket descriptor.
* @param level The level which to get the option from.
* @param optname The option name.
* @param optval Identifies the buffer which the value will be
* returned.
* @param optlen Initially contains the length of the buffer, upon
* return will be set to the actual size of the value.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sock_getsockopt( pj_sock_t sockfd,
pj_uint16_t level,
pj_uint16_t optname,
void *optval,
int *optlen);
/**
* Manipulate the options associated with a socket. Options may exist at
* multiple protocol levels; they are always present at the uppermost socket
* level.
*
* @param sockfd The socket descriptor.
* @param level The level which to get the option from.
* @param optname The option name.
* @param optval Identifies the buffer which contain the value.
* @param optlen The length of the value.
*
* @return PJ_SUCCESS or the status code.
*/
PJ_DECL(pj_status_t) pj_sock_setsockopt( pj_sock_t sockfd,
pj_uint16_t level,
pj_uint16_t optname,
const void *optval,
int optlen);
/**
* Receives data stream or message coming to the specified socket.
*
* @param sockfd The socket descriptor.
* @param buf The buffer to receive the data or message.
* @param len On input, the length of the buffer. On return,
* contains the length of data received.
* @param flags Combination of #pj_sock_msg_flag.
*
* @return PJ_SUCCESS or the error code.
*/
PJ_DECL(pj_status_t) pj_sock_recv(pj_sock_t sockfd,
void *buf,
pj_ssize_t *len,
unsigned flags);
/**
* Receives data stream or message coming to the specified socket.
*
* @param sockfd The socket descriptor.
* @param buf The buffer to receive the data or message.
* @param len On input, the length of the buffer. On return,
* contains the length of data received.
* @param flags Bitmask combination of #pj_sock_msg_flag.
* @param from If not NULL, it will be filled with the source
* address of the connection.
* @param fromlen Initially contains the length of from address,
* and upon return will be filled with the actual
* length of the address.
*
* @return PJ_SUCCESS or the error code.
*/
PJ_DECL(pj_status_t) pj_sock_recvfrom( pj_sock_t sockfd,
void *buf,
pj_ssize_t *len,
unsigned flags,
pj_sockaddr_t *from,
int *fromlen);
/**
* Transmit data to the socket.
*
* @param sockfd Socket descriptor.
* @param buf Buffer containing data to be sent.
* @param len On input, the length of the data in the buffer.
* Upon return, it will be filled with the length
* of data sent.
* @param flags Bitmask combination of #pj_sock_msg_flag.
*
* @return PJ_SUCCESS or the status code.
*/
PJ_DECL(pj_status_t) pj_sock_send(pj_sock_t sockfd,
const void *buf,
pj_ssize_t *len,
unsigned flags);
/**
* Transmit data to the socket to the specified address.
*
* @param sockfd Socket descriptor.
* @param buf Buffer containing data to be sent.
* @param len On input, the length of the data in the buffer.
* Upon return, it will be filled with the length
* of data sent.
* @param flags Bitmask combination of #pj_sock_msg_flag.
* @param to The address to send.
* @param tolen The length of the address in bytes.
*
* @return PJ_SUCCESS or the status code.
*/
PJ_DECL(pj_status_t) pj_sock_sendto(pj_sock_t sockfd,
const void *buf,
pj_ssize_t *len,
unsigned flags,
const pj_sockaddr_t *to,
int tolen);
#if PJ_HAS_TCP
/**
* The shutdown call causes all or part of a full-duplex connection on the
* socket associated with sockfd to be shut down.
*
* @param sockfd The socket descriptor.
* @param how If how is PJ_SHUT_RD, further receptions will be
* disallowed. If how is PJ_SHUT_WR, further transmissions
* will be disallowed. If how is PJ_SHUT_RDWR, further
* receptions andtransmissions will be disallowed.
*
* @return Zero on success.
*/
PJ_DECL(pj_status_t) pj_sock_shutdown( pj_sock_t sockfd,
int how);
#endif
/**
* @}
*/
PJ_END_DECL
#endif /* __PJ_SOCK_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -