⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sock.h

📁 基于sip协议的网络电话源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* $Id: sock.h 974 2007-02-19 01:13:53Z bennylp $ *//*  * Copyright (C)2003-2007 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#ifndef __PJ_SOCK_H__#define __PJ_SOCK_H__/** * @file sock.h * @brief Socket Abstraction. */#include <pj/types.h>PJ_BEGIN_DECL /** * @defgroup PJ_SOCK Socket Abstraction * @ingroup PJ_IO * @{ * * The PJLIB socket abstraction layer is a thin and very portable abstraction * for socket API. It provides API similar to BSD socket API. The abstraction * is needed because BSD socket API is not always available on all platforms, * therefore it wouldn't be possible to create a trully portable network * programs unless we provide such abstraction. * * Applications can use this API directly in their application, just * as they would when using traditional BSD socket API, provided they * call #pj_init() first. * * \section pj_sock_examples_sec Examples * * For some examples on how to use the socket API, please see: * *  - \ref page_pjlib_sock_test *  - \ref page_pjlib_select_test *  - \ref page_pjlib_sock_perf_test *//** * Supported address families.  * APPLICATION MUST USE THESE VALUES INSTEAD OF NORMAL AF_*, BECAUSE * THE LIBRARY WILL DO TRANSLATION TO THE NATIVE VALUE. */extern const pj_uint16_t PJ_AF_UNIX;    /**< Unix domain socket.	*/#define PJ_AF_LOCAL	 PJ_AF_UNIX;    /**< POSIX name for AF_UNIX	*/extern const pj_uint16_t PJ_AF_INET;    /**< Internet IP protocol.	*/extern const pj_uint16_t PJ_AF_INET6;   /**< IP version 6.		*/extern const pj_uint16_t PJ_AF_PACKET;  /**< Packet family.		*/extern const pj_uint16_t PJ_AF_IRDA;    /**< IRDA sockets.		*//** * Supported types of sockets. * APPLICATION MUST USE THESE VALUES INSTEAD OF NORMAL SOCK_*, BECAUSE * THE LIBRARY WILL TRANSLATE THE VALUE TO THE NATIVE VALUE. */extern const pj_uint16_t PJ_SOCK_STREAM; /**< Sequenced, reliable, connection-					      based byte streams.           */extern const pj_uint16_t PJ_SOCK_DGRAM;  /**< Connectionless, unreliable 					      datagrams of fixed maximum 					      lengths.                      */extern const pj_uint16_t PJ_SOCK_RAW;    /**< Raw protocol interface.       */extern const pj_uint16_t PJ_SOCK_RDM;    /**< Reliably-delivered messages.  *//** * Socket level specified in #pj_sock_setsockopt() or #pj_sock_getsockopt(). * APPLICATION MUST USE THESE VALUES INSTEAD OF NORMAL SOL_*, BECAUSE * THE LIBRARY WILL TRANSLATE THE VALUE TO THE NATIVE VALUE. */extern const pj_uint16_t PJ_SOL_SOCKET;	/**< Socket level.  */extern const pj_uint16_t PJ_SOL_IP;	/**< IP level.	    */extern const pj_uint16_t PJ_SOL_TCP;	/**< TCP level.	    */extern const pj_uint16_t PJ_SOL_UDP;	/**< UDP level.	    */extern const pj_uint16_t PJ_SOL_IPV6;	/**< IP version 6   *//* IP_TOS  * * Note: *  TOS CURRENTLY DOES NOT WORK IN Windows 2000 and above! *  See http://support.microsoft.com/kb/248611 */extern const pj_uint16_t PJ_IP_TOS;	/**< IP_TOS optname in setsockopt() *//* * IP TOS related constats. * * Note: *  TOS CURRENTLY DOES NOT WORK IN Windows 2000 and above! *  See http://support.microsoft.com/kb/248611 */extern const pj_uint16_t PJ_IPTOS_LOWDELAY;	/**< Minimize  delays	    */extern const pj_uint16_t PJ_IPTOS_THROUGHPUT;	/**< Optimize throughput    */extern const pj_uint16_t PJ_IPTOS_RELIABILITY;	/**< Optimize for reliability*/extern const pj_uint16_t PJ_IPTOS_MINCOST;	/**< "filler data" where slow 						 transmission does't matter *//** * Values to be specified as \c optname when calling #pj_sock_setsockopt()  * or #pj_sock_getsockopt(). */extern const pj_uint16_t PJ_SO_TYPE;    /**< Socket type.               */extern const pj_uint16_t PJ_SO_RCVBUF;  /**< Buffer size for receive.   */extern const pj_uint16_t PJ_SO_SNDBUF;  /**< Buffer size for send.      *//* * Flags to be specified in #pj_sock_recv, #pj_sock_send, etc. */extern const int PJ_MSG_OOB;	    /**< Out-of-band messages.		 */extern const int PJ_MSG_PEEK;	    /**< Peek, don't remove from buffer. */extern const int PJ_MSG_DONTROUTE;  /**< Don't route.			 *//** * Flag to be specified in #pj_sock_shutdown. */typedef enum pj_socket_sd_type{    PJ_SD_RECEIVE   = 0,    /**< No more receive.	    */    PJ_SHUT_RD	    = 0,    /**< Alias for SD_RECEIVE.	    */    PJ_SD_SEND	    = 1,    /**< No more sending.	    */    PJ_SHUT_WR	    = 1,    /**< Alias for SD_SEND.	    */    PJ_SD_BOTH	    = 2,    /**< No more send and receive.  */    PJ_SHUT_RDWR    = 2     /**< Alias for SD_BOTH.	    */} pj_socket_sd_type;/** Address to accept any incoming messages. */#define PJ_INADDR_ANY	    ((pj_uint32_t)0)/** Address indicating an error return */#define PJ_INADDR_NONE	    ((pj_uint32_t)0xffffffff)/** Address to send to all hosts. */#define PJ_INADDR_BROADCAST ((pj_uint32_t)0xffffffff)/**  * Maximum length specifiable by #pj_sock_listen(). * If the build system doesn't override this value, then the lowest  * denominator (five, in Win32 systems) will be used. */#if !defined(PJ_SOMAXCONN)#  define PJ_SOMAXCONN	5#endif/** * Constant for invalid socket returned by #pj_sock_socket() and * #pj_sock_accept(). */#define PJ_INVALID_SOCKET   (-1)/** * Structure describing a generic socket address. * If PJ_SOCKADDR_HAS_LEN is not zero, then sa_zero_len member is added * to this struct. As far the application is concerned, the value of * this member will always be zero. Internally, PJLIB may modify the value * before calling OS socket API, and reset the value back to zero before * returning the struct to application. */typedef struct pj_sockaddr{#if defined(PJ_SOCKADDR_HAS_LEN) && PJ_SOCKADDR_HAS_LEN!=0    pj_uint8_t  sa_zero_len;    pj_uint8_t  sa_family;#else    pj_uint16_t	sa_family;	/**< Common data: address family.   */#endif    char	sa_data[14];	/**< Address data.		    */} pj_sockaddr;#undef s_addr/** * This structure describes Internet address. */typedef struct pj_in_addr{    pj_uint32_t	s_addr;		/**< The 32bit IP address.	    */} pj_in_addr;/** * This structure describes Internet socket address. * If PJ_SOCKADDR_HAS_LEN is not zero, then sin_zero_len member is added * to this struct. As far the application is concerned, the value of * this member will always be zero. Internally, PJLIB may modify the value * before calling OS socket API, and reset the value back to zero before * returning the struct to application. */struct pj_sockaddr_in{#if defined(PJ_SOCKADDR_HAS_LEN) && PJ_SOCKADDR_HAS_LEN!=0    pj_uint8_t  sin_zero_len;	/**< Just ignore this.		    */    pj_uint8_t  sin_family;	/**< Address family.		    */#else    pj_uint16_t	sin_family;	/**< Address family.		    */#endif    pj_uint16_t	sin_port;	/**< Transport layer port number.   */    pj_in_addr	sin_addr;	/**< IP address.		    */    char	sin_zero[8];	/**< Padding.			    */};/** * This structure describes IPv6 address. */typedef struct pj_in6_addr{    /** Union of address formats. */    union {	pj_uint8_t  u6_addr8[16];   /**< u6_addr8   */	pj_uint16_t u6_addr16[8];   /**< u6_addr16  */	pj_uint32_t u6_addr32[4];   /**< u6_addr32  */    } in6_u;/** Shortcut to access in6_u.u6_addr8. */#define s6_addr                 in6_u.u6_addr8/** Shortcut to access in6_u.u6_addr16. */#define s6_addr16               in6_u.u6_addr16/** Shortcut to access in6_u.u6_addr32. */#define s6_addr32               in6_u.u6_addr32} pj_in6_addr;/** Initializer value for pj_in6_addr. */#define PJ_IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }/** Initializer value for pj_in6_addr. */#define PJ_IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }/** * This structure describes IPv6 socket address. * If PJ_SOCKADDR_HAS_LEN is not zero, then sin_zero_len member is added * to this struct. As far the application is concerned, the value of * this member will always be zero. Internally, PJLIB may modify the value * before calling OS socket API, and reset the value back to zero before * returning the struct to application. */typedef struct pj_sockaddr_in6{#if defined(PJ_SOCKADDR_HAS_LEN) && PJ_SOCKADDR_HAS_LEN!=0    pj_uint8_t  sin_zero_len;	    /**< Just ignore this.	   */    pj_uint8_t  sin_family;	    /**< Address family.	   */#else    pj_uint16_t	sin6_family;	    /**< Address family		    */#endif    pj_uint16_t	sin6_port;	    /**< Transport layer port number. */    pj_uint32_t	sin6_flowinfo;	    /**< IPv6 flow information	    */    pj_in6_addr sin6_addr;	    /**< IPv6 address.		    */    pj_uint32_t sin6_scope_id;	    /**< IPv6 scope-id		    */} pj_sockaddr_in6;/***************************************************************************** * * SOCKET ADDRESS MANIPULATION. * ***************************************************************************** *//** * Convert 16-bit value from network byte order to host byte order. * * @param netshort  16-bit network value. * @return	    16-bit host value. */PJ_DECL(pj_uint16_t) pj_ntohs(pj_uint16_t netshort);/** * Convert 16-bit value from host byte order to network byte order. * * @param hostshort 16-bit host value. * @return	    16-bit network value. */PJ_DECL(pj_uint16_t) pj_htons(pj_uint16_t hostshort);/** * Convert 32-bit value from network byte order to host byte order. * * @param netlong   32-bit network value. * @return	    32-bit host value. */PJ_DECL(pj_uint32_t) pj_ntohl(pj_uint32_t netlong);/** * Convert 32-bit value from host byte order to network byte order. * * @param hostlong  32-bit host value. * @return	    32-bit network value. */PJ_DECL(pj_uint32_t) pj_htonl(pj_uint32_t hostlong);/** * Convert an Internet host address given in network byte order * to string in standard numbers and dots notation. * * @param inaddr    The host address. * @return	    The string address. */PJ_DECL(char*) pj_inet_ntoa(pj_in_addr inaddr);/** * This function converts the Internet host address cp from the standard * numbers-and-dots notation into binary data and stores it in the structure * that inp points to.  * * @param cp	IP address in standard numbers-and-dots notation. * @param inp	Structure that holds the output of the conversion. * * @return	nonzero if the address is valid, zero if not. */PJ_DECL(int) pj_inet_aton(const pj_str_t *cp, struct pj_in_addr *inp);/** * Convert address string with numbers and dots to binary IP address. *  * @param cp	    The IP address in numbers and dots notation. * @return	    If success, the IP address is returned in network *		    byte order. If failed, PJ_INADDR_NONE will be *		    returned. * @remark * This is an obsolete interface to #pj_inet_aton(); it is obsolete * because -1 is a valid address (255.255.255.255), and #pj_inet_aton() * provides a cleaner way to indicate error return. */PJ_DECL(pj_in_addr) pj_inet_addr(const pj_str_t *cp);/** * Convert address string with numbers and dots to binary IP address. *  * @param cp	    The IP address in numbers and dots notation. * @return	    If success, the IP address is returned in network *		    byte order. If failed, PJ_INADDR_NONE will be *		    returned. * @remark * This is an obsolete interface to #pj_inet_aton(); it is obsolete * because -1 is a valid address (255.255.255.255), and #pj_inet_aton() * provides a cleaner way to indicate error return. */PJ_DECL(pj_in_addr) pj_inet_addr2(const char *cp);/** * Get the transport layer port number of an Internet socket address. * The port is returned in host byte order. * * @param addr	    The IP socket address. * @return	    Port number, in host byte order. */PJ_INLINE(pj_uint16_t) pj_sockaddr_in_get_port(const pj_sockaddr_in *addr){    return pj_ntohs(addr->sin_port);}/** * Set the port number of an Internet socket address. * * @param addr	    The IP socket address. * @param hostport  The port number, in host byte order. */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -