AF 表示ADDRESS FAMILY 地址族,PF 表示PROTOCOL FAMILY 协议族,但这两个宏定义是一样的,所以使用哪个都没有关系。Winsock2.h中#define AF_INET 2,#define PF_INET AF_INET,所以在windows中AF_INET与PF_INET完全一样。而在Unix/Linux系统中,在不同的版本中这两者有微小差别。对于BSD,是AF,对于POSIX是PF。UNIX系统支持AF_INET,AF_UNIX,AF_NS等,而DOS,Windows中仅支持AF_INET,它是网际网区域。
在函数socketpair与socket的domain参数中有AF_UNIX,AF_LOCAL,AF_INET,PF_UNIX,PF_LOCAL,PF_INET.这几个参数有AF_UNIX=AF_LOCAL, PF_UNIX=PF_LOCAL, AF_LOCAL=PF_LOCAL, AF_INET=PF_INET.。
建议:对于socketpair与socket的domain参数,使用PF_LOCAL系列,而在初始化套接口地址结构时,则使用AF_LOCAL.。
例如: z = socket(PF_LOCAL, SOCK_STREAM, 0); adr_unix.sin_family = AF_LOCAL;。
我们一般的英特网局域网用的就是这个,AF_INET只是一个标识而已。
定义是这样的 #define AF_INET 2 // internetwork: UDP, TCP, etc. 。
INET:internetwork。
1、socket函数声明在sys/socket.h中。
2、AF_INET、SOCK_STREAM 是2个整型参数,其中:
AF_INET:IPV4 internet协议。
SOCK_STREAM:面向连接的全双工字节流通信。
创建套接字时,用该字段指定地址家族,对于TCP/IP协议的,必须设置为AF_INET。
生成一个TCP的socket
Function: int socket (int namespace, int style, int protocol) 。
This function creates a socket and specifies communication style style, which should be one of the socket styles listed in 16.2 Communication Styles. The namespace argument specifies the namespace; it must be PF_LOCAL (see section 16.5 The Local Namespace) or PF_INET (see section 16.6 The Internet Namespace). protocol designates the specific protocol (see section 16.1 Socket Concepts); zero is usually right for protocol. 。
The return value from socket is the file descriptor for the new socket, or -1 in case of error. The following errno error conditions are defined for this function: 。
EPROTONOSUPPORT 。
The protocol or style is not supported by the namespace specified. 。
EMFILE
The process already has too many file descriptors open. 。
ENFILE
The system already has too many file descriptors open. 。
EACCES
The process does not have the privilege to create a socket of the specified style or protocol. 。
ENOBUFS
The system ran out of internal buffer space. 。
The file descriptor returned by the socket function supports both read and write operations. However, like pipes, sockets do not support file positioning operations. 。
SOCK_STREAM提供面向连接的稳定数据传输,即TCP协议。SOCK_STREAM应用在C语言socket编程中,在进行网络连接前,需要用socket函数向系统申请一个通信端口。socket函数的使用方法如下:
int socket(int domain, int type, int protocol);。
在参数表中,domain指定使用何种的地址类型,比较常用的有:
PF_INET, AF_INET: Ipv4网络协议;
PF_INET6, AF_INET6: Ipv6网络协议。
type参数的作用是设置通信的协议类型,可能的取值如下所示:
SOCK_STREAM: 提供面向连接的稳定数据传输,即TCP协议。
OOB: 在所有数据传送前必须使用connect()来建立连接状态。
SOCK_DGRAM: 使用不连续不可靠的数据包连接。
SOCK_SEQPACKET: 提供连续可靠的数据包连接。
SOCK_RAW: 提供原始网络协议存取。
SOCK_RDM: 提供可靠的数据包连接。
SOCK_PACKET: 与网络驱动程序直接通信。
参数protocol用来指定socket所使用的传输协议编号。这一参数通常不具体设置,一般设置为0即可。