免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
APUE 16chp 网络IPC:套接字1、创建套接字#include Int socket( int domain, int type, int protocol);注意:AF_LOCAL域是AF_UNIX的别名,AF_UNSPEC域可以代表任何域。2、套接字通信是双向的,禁止套接字上的输入/输出#include Int shutdown ( int sockfd, int how);3、处理字节序和网络字节序之间的轮换:#includeUint32_t htonl (uint32_t hostint32);Uint16_t htons(uint16_t hostint16);Uint32_t ntohl (uint32_t netint32);Uint16_t ntohs (uint16_t netint16);4、地址格式:Struct sockaddrSa_family_t sa_family;Char sa_data;在Linux中,该结构定义如下:Struct sockaddrSa_family_t sa_family;Char sa_data14; 而在FreeBSD中,该结构定义如下:Struct sockaddrUnsigned char sa_len;Sa_family_t sa_family;Char sa_data14;因特网地址定义在中。在IPV4因特网域(AF_INET)中,套接字地址用如下结构sokaddr_in表示:Struct in_addrIn_addr_t s_addr;Struct sockaddr_inSa_family_t sin_family;In_port_t sin_port;Struct in_addr sin_addr;数据类型in_port_t 定义成uint16_t。数据类型in_addr_t 定义成uint32_t。这些整数类型在中定义并指定了相应的位数。与IPV4因特网域(AF_INET)相比较,IPV6因特网域(AF_INET6)套接字地址用如下结构sockaddr_in6表示:Struct in6_addrUint8_t s6_addr16;Struct sockaddr_in6Sa_family_t sin6_family;In_port_t sin6_port;Uint32_t sin6_flowinfo;Struct in6_addr sin6_addr;Uint32_t sin6_scope_id;在Linux中,sockaddr_in 定义如下:Struct sockaddr_inSa_family_t sin_family;In_port_t sin_port;Struct in_addr sin_addr;Unsigned char sin_zero8;5、#include Const char * inet_ntop (int domain, const void * restrict addr, char * restrict str, socklen_t size);Int inet_pton ( int domain, const char * restrict str, void * restrict addr);6、找给定计算机的主机信息#includeStruct hostent * gethostent (void);Void sethostent (int stayopen);Void endhostent (void);Struct hostentChar * h_name;Char * h_aliases;Int h_addrtype;Int h_length;Char * h_addr_list;7、从接口获得网络名字和网络号:#includenetdb.h.Struct netent * getnetbyaddr (uint32_t net, int type);Struct netent * getnetbyname (const char * name);Struct netent * getnetent (void);Void setnetent (int stayopen);Void endnetent (void);Struct netentChar * n_name;Char * n_aliases;Int n_addrtype;Uint32_t n_net;8、将协议名字和协议号采用以下函数映射#include Struct protoent * getprotobyname (const char * name);Struct protoent * getprotobynumber (int proto);Struct protoent * getprotoent (void);Void setprotoent (int stayopen);Void endprotoent (void);Struct protoentChar * p_name;Char * p_aliases;Int p_proto;9、从一个服务名映射到一个端口号,服务名#includeStruct servent * getservbyname (const char * name, const char * proto);Struct servent * getservbyport (int port, const char * proto);Struct servent * getservent( (void);Void setervent (int stayopen);Void endservent (void);Struct serventChar * s_name;Char * s_aliases;Int s_port;Char * s_proto;10、从一个主机名字和服务名字映射到一个地址#include #include Int getaddrinfo (const char * restrict host, const char * restrict service, const struct addrinfo * restrict hint, struct addrinfo * restrict res);Void freeaddrinfo (struct addrinfo * ai);Struct addrinfoInt ai_flags;int ai_family;Int ai_socktype;Int ai_protocol;Socklen_t ai_addrlen;Struct sockaddr * ai_addr;Char * ai_canonname;Struct addrinfo * ai_next;11、gai_strerror将返回的错误码转换成错误消息#includeConst char * gai_strerror (int error);12、将地址转换成主机或者服务名#include#include Int getnameinfo (const struct sockaddr * restrict addr, socklen_t alen, char * restrict host,socklen_t hostlen, char * restrict service, socklen_t servlen, unsigned int flags); 13、将套接字与地址绑定#include Int bind (int sockfd, const struct sockaddr * addr, socklen_t len );对于使用的地址有一些限制:A、 在进程所运行的机器上,指定的地址必须有效,不能指定一个其他机器的地址。B、 地址必须和创建套接字时的地址族支持的格式相匹配。C、 端口号必须不小于1024,除非该进程具有相应的特权(即为超级用户)。D、 一般只有套接字端点能够与地址绑定,尽管有些协议允许多重绑定。14、获取绑定到一个套接字的地址:#include Int getsockname ( int sockfd, struct sockaddr * restrict addr, socklen_t * restrict alenp);注意:在调用getsockname之前,设置alenp为一个指向整数的指针,该整数指定缓冲区sockaddr的大小。返回时,该整数会被设置成返回地址的大小。如果该地址和提供的缓冲区长度不匹配,则将其截断而不报错。如果当前没有绑定到该套接字的地址,其结果没有定义。 15、获得对方地址:#include Int getpeername ( int sockfd, struct sockaddr * restrict addr, socklen_t * restrict alenp);注意:如果套接字已经和对方连接,调用getpeername来找到对方的地址。除了还会返回对方的地址之外,函数getpeername和getsockname一样。16、建立连接#include Int connect ( int sockfd, const struct sockaddr * addr, socklen_t len);17、listen函数#include Int listen ( int sockfd,int backlog);18、accept函数#include Int accept ( int sockfd, struct sockaddr * restrict addr, socklen_t * restrict len);19、send、sendto以及sendmsg信息发送函数#include Ssize_t send ( int sockfd, const void * buf, size_t nbytes, int flags);Ssize_t sendto ( int sockfd, const void * buf, size_t nbytes, int flags, const struct sockaddr * destaddr, socklen_t destlen);Ssize_t sendmsg ( int sockfd, const struct msghdr * msg, int flags);Struct msghdrVoid * msg_name;Socklen_t msg_namelen;Struct iovec * msg_iov;Int msg_iovlen;Void * msg_control;Socklen_t msg_controllen;Int msg_flags;19、recv、recvfrom 与recvmsg接收数据函数#include Ssize_t recv ( int sockfd, void * buf, size_t nbytes, int flags);Ssize_t recvfrom ( int sockfd, void * restrict buf, size_t len, int flags, struct sockaddr * restrict addr, socklen_t * restrict addrlen);Ssize_t recvmsg ( int sockfd, struct msghdr * msg, int flags);20、带外数据:TCP支持带外数据,但是UDP不支持。TCP仅支持一个字节的紧急数据,但是允许紧急数据在普通数据传递机制数据流之外传输。为了产生紧急数据,在三个send函数中任何一个指定MSG_OOB。如果带MSG_OOB标志传输字节超过一个时,最后一个字节被看作紧急数据字节。当接收到紧急数据时,那么改善信号SIGURG。TCP支持紧急标记的概念:在普通数据流中紧急数据所在的位置。如果采用套接字选项SO_OOBINLINE,那么可以在普通数据中接收紧急数据。为帮助判断是否接收到紧急标记,可以使用函数sockatmark21、#include Int sockatmark ( int sockfd);当下一个要读的字节在紧急标志所标识的位置时,sockatmark返回1。当带外数据出现在套接字读取队列时,select函数会返回一个文件描述符并且拥有一个异常状态挂起。可以在普通数据流上接受紧急数据,或者在某个recv函数中MSG_OOB标志在其他队列数据之前接收紧急数据。TCP队列仅有一字节的紧急数据,如果在接收当前的紧急数据字节之前又有新的紧急数据到来,那么当前的字节会被丢弃。22、在基于套
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江西省黎川县职业中等专业学校工作人员招聘考试试题
- 2025江苏省东台中等专业学校工作人员招聘考试试题
- 大棚地面装饰工程施工技术方案
- 地下室金刚砂地坪施工样板施工技术方案
- 2026年医疗健康行业技术革新报告
- 高中地理学习中智能错题本系统的空间思维训练应用教学研究课题报告
- 滨江集团毛利率同比改善财务结构持续优化
- 2025年化妆品行业品牌竞争分析报告
- 人工智能智能教育平台开发项目2026年:智能化教学解决方案可行性分析
- 2026年医疗器械行业灭菌技术智能化报告
- PS牧场物语男孩版女孩版完美攻略附完美EC
- 2023年北京科技大学冶金物理化学考研真题
- 涵洞水力计算-2
- 中医基础理论(复习整理版)
- 休闲体育专业就业前景和就业方向
- 上海见证员试题
- GB/T 6360-1995激光功率能量测试仪器规范
- SoftX3000七号中继数据配置
- GB/T 28022-2021玩具适用年龄判定指南
- 第四章纳米固体材料
- 四级英语单词红秘笈
评论
0/150
提交评论