linux-套接字编程.ppt
23processTCP withbuffers,variablessocket由应用程序由应用程序开发者控制开发者控制由操作系统控制由操作系统控制host orserverprocessTCP withbuffers,variablessocketcontrolled byapplicationdevelopercontrolled byoperatingsystemhost orserverinternet1. 套接字是一个主机本地应用程序所创建的套接字是一个主机本地应用程序所创建的, 为操作系为操作系统所控制的接口统所控制的接口 (“门门”) .2. 应用进程通过这个接口应用进程通过这个接口,使用传输层提供的服务使用传输层提供的服务, 跨网跨网络发送络发送(/接收接收)消息到消息到(/从从)其他应用进程。其他应用进程。3.Client/server模式的通信接口模式的通信接口套接字接口套接字接口.45678910111213141516171819202122232425262728#include int socket(int family,int type,int protocol); 返回:非负描述字成功-1失败第一个参数指明了协议簇,目前支持5种协议簇,最常用的有AF_INET(IPv4协议)和AF_INET6(IPv6协议);第二个参数指明套接口类型,有三种类型可选:SOCK_STREAM(字节流套接口)、SOCK_DGRAM(数据报套接口)和SOCK_RAW(原始套接口);如果套接口类型不是原始套接口,那么第三个参数就为0。29#include int connect(int sockfd,const struct sockaddr * servaddr,socklen_t addrlen); 返回:0成功-1失败第一个参数是socket函数返回的套接口描述字;第二和第三个参数分别是一个指向套接口地址结构的指针和该结构的大小。30#include int bind(int sockfd,const struct sockaddr * myaddr,socklen_t addrlen); 返回:0成功-1失败第一个参数是socket函数返回的套接口描述字;第二和第第三个参数分别是一个指向特定于协议的地址结构的指针和该地址结构的长度。31#include int listen(int sockfd,int backlog); 返回:0成功-1失败第一个参数是socket函数返回的套接口描述字;第二个参数规定了内核为此套接口排队的最大连接个数。由于listen函数第二个参数的原因,内核要维护两个队列:以完成连接队列和未完成连接队列。未完成队列中存放的是TCP连接的三路握手为完成的连接,accept函数是从以连接队列中取连接返回给进程;当以连接队列为空时,进程将进入睡眠状态。32#include int accept(int sockfd,struct sockaddr *cliaddr,socklen_t * addrlen); 返回:非负描述字成功-1失败第一个参数是socket函数返回的套接口描述字;第二个和第三个参数分别是一个指向连接方的套接口地址结构和该地址结构的长度;该函数返回的是一个全新的套接口描述字;如果对客户段的信息不感兴趣,可以将第二和第三个参数置为空。333435363738394041424344socket*connect*send(write)*recv(read)*close*bindlistenacceptrecvmsgsendmsgrecvfromsendtoshutdowngetpeernamegetsockoptsetsockopt