第三章、基于TCP套接字编程
概述:
1、socket函数
int socket(int family, int type, int protocol);
成功时返回非负整数值,与文件描述符类似。简称套接字描述符sockfd
2、connect函数
int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
套接字地址结构包含服务器的IP地址和端口
3、bind函数
int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);
赋予本地协议地址一个套接字
IPv4通配地址由常值INADDR_ANY指定
4、listen函数
int listen(int sockfd, int backlog);
把一个未连接的套接字转换成一个被动套接字,接受指向该套接字的连接请求
backlog指相应套接字排队的最大连接个数
5、accept函数
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t addrlen);
第二、三参数用来返回已连接的客户的协议地址
addrlen是值-结果参数:调用前,告诉内核结构的大小,不至于越界;返回时,告诉内核该结构实际存放的字节数
成功时返回一个已连接套接字,函数第一个参数为监听套接字
6、fork和exec函数
pid_t fork(void);
调用一次,返回两次。父进程返回子进程ID号,子进程返回0
两个典型用法:
①一个进程创建自身的副本,每个副本可以同时处理各自操作。例:网络服务器
②首先创建自身的副本,然后副本调用exec把自身替换成新的程序。例:shell
7、并发服务器
1)当一个连接建立时,accept返回
2)服务器调用fork,然后子进程服务客户(通过已连接套接字connfd)
3)父进程等待另一个连接(通过监听套接字listenfd)
4)父进程关闭已连接套接字,子进程关闭监听套接字
注:每个套接字都有一个引用计数
8、close函数
int close(int sockfd);
关闭套接字,返回到调用进程
9、getsockname和getpeername函数
返回与套接字关联的本地协议地址或外地协议地址
转自:
http://blog.csdn.net/health747474/article/details/8890240