1. int socket(int domain, int type, int protocol);
在使用该调用的程序中加入头文件:
#include <sys/types.h>
#include <sys/socket.h>
socket 调用建立一个通信断电并返回一个socket描述符。
参数描述:
domain:用来指定发生通信的域,是用来选择要使用的协议族的参数,详细如下:
PF_LOCAL:用于本地通信的UNIX协议族(以前为PF_UNIX)。
PF_INET:IPv4互联网协议族。
PF_ISO:ISO协议族。
PF_CCITT:ITU-T协议,类似X.25。
PF_NS:Xerox网络系统协议。
PF_INET6:IPv6互联网协议族。
其中,PF_xxxx在以前也定义为AF_xxxx,两者可以互换使用,如:PF_UNIX和AF_UNIX常量是 相同的值。
type:参数type用来指明通信的类型,定义有以下几种:
SOCK_STREAM:提供顺序、可靠和基于字节流的双向链接。支持带外数据(out-of-band)传输,对于带外数 据,要求发送方在发送缓冲中的数据之前发送带外数据,接收方在处理缓冲之前处理带外数 据。
SOCK_DGRAM:支持数据报通信(无连接、不可靠、固定的消息最大长度)。
SOCK_SEQPACKET:提供顺序的、可靠的、基于固定最大长度数据报的有传输路径的双向链接。一个接受者 在每次read系统调用时必须读入一个完整的报文(packet)。
SOCK_RAW:提供原始网络协议访问。
SOCK_RDM:提供一个可靠的数据报层,但不保证报文到达的顺序。
protocol:用来指定在socket上使用的特定协议。
2.int connect(int s, const struct sockaddr *name, int namelen);
connect系统调用的作用是在一个指定的socket上建立一个链接,使用时加入以下头文件:
#include <sys/types.h>
#include <sys/socket.h>
参数分析:
s:是一个打开的socket描述符。
name:一个地址结构,指出了服务端的名字。该结构如下:
struct socketaddr
{
u_char sa_len; /* 总长度 */
u_char sa_family; /* 地址族 */
char sa_data[14];/* 实际,地址值 */
};
namelen:长度。
3. int bind(int s, struct sockaddr *my_addr, int addrlen);
该调用将一个名字绑定到一个socket上。
需要的头文件:
#include <sys/types.h>
#include <sys/socket.h>
bind调用为一个未命名的socket分配以个名字。换句话来说,bind调用时给套接字s赋予本地地址my_addr,这个 my_addr地址的长度为addrlen。对于不同的通信域的地址联编的规则是不同的,这里还是以internet域为主。如果想让 进程侦听任何一个本地接口的报文,那么将地址结构sockaddr_in中的成员sin_addr设置为INADDR_ANY.IP协议的 socket可以绑定到一个广播地址或组地址。这里要注意,要侦听的端口(sin_port)的选择。