二,函数详细介绍
1, int socket(int domain, int type,int protocol) domain:说明我们网络程序所在的主机采用的通讯协族(af_unix与af_inet等). 其实这里指定的是地址族,在unix中协议族与地址族是一一对应的. af_unix只能够用于单一的unix系统进程间通信,而af_inet是针对internet的, 因而可以允许在 远程 主机之间通信(当我们 man socket时发现 domain可选项 是 pf_*而不是af_*,因为glibc是posix的实现 所以用pf代替了af,实际上查看 sys/socket.h会发现如下定义:#define af_inet 2 ,#define pf_inet af_inet). type:我们网络程序所采用的通讯协议(sock_stream,sock_dgram,sock_raw等) sock_stream表明我们用的是tcp协议,这样会提供按顺序的,可靠,双向,面向连接的比特流. sock_dgram 表明我们用的是udp协议,这样只会提供定长的,不可靠,无连接的通信. sock_raw提供对internal network interfaces的访问,只有特权程序才能使用。对应ip协议、icmp协议等等。 protocol:由于我们指定了type,所以对应了单一的protocal,所以这个地方我们一般只要用0来代替就可以了 . 如果存在多协议,则必须明确指定. socket为网络通讯做基本的准备.成功时返回一个socket号,失败时返回-1. server端与client端都使用本函数. 2, int bind(int sfd, struct sockaddr_in *addr, int len) sfd:是由socket调用返回的描述符即socket号. addr:是一个指向sockaddr_in的指针. len:是sockaddr结构的长度. sizeof ( struct sockaddr ) 在<linux/in.h>中sockaddr_in的定义为 struct sockaddr_in { unsigned short sin_family; unsigned short int sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; } sin_family一般为af_inet, sin_addr设置为inaddr_any表示可以与任何的主机通信, sin_port是我们要监听的端口号. sin_zero[8]暂时未用 ... 下一页