《+Linux+Socket编程》读书笔记》.doc

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《+Linux+Socket编程》读书笔记》.doc

书名:《实战 Linux Socket编程》 作者:Warren W.Gay 翻译:詹俊鹄 于卫 出版:西安电子科技大学出版社 第一章 套接口简介 1、套接口是通信中的一个端点,套接口创建后,就如同一个文件描述符,可以使用文件的I/O函数对它进行读、写和关闭操作。 2、套接口和已打开的文件之间存在如下差别: 不能在套接口上调用函数lseek(这个限制也适用于管道) 套接口可以和网络地址关联,文件和管道却不能 套接口具有很多能够通过ioctl进行查询和设置的选项 套接口必须在正确的状态下才能实现输入和输出,而已打开文件在任何时候都可以进行读或写操作。 3、套接口和管道不同,它允许进行进行双向通信,即可以使用同一个套接口描述符进行读和写【代码test1.2.c】。 4、创建套接口 #include sys/types.h #include sys/socket.h int socketpair ( int domain, int type, int protocol, int sv[2]); domain:套接口的域名,表示使用哪个地址族,要么是AF_LOCAL要么是AF_UNIX。地址族的作用是指明使用哪一种地址类型。AF_LOCAL(AF_UNIX)表示使用本地地址规则来生成地址,而AF_INET则表示使用IP地址规则生成地址。 type:套接口的类型,可选值为SOCK_STREAM、SOCK_DGRAM protocol:使用的协议。一般情况下为0,这样可以使用适合所选domain的正确缺省协议。 sv:套接口文件描述符数组。每个整型值代表一个套接口,类似于管道中的某一端的端点。 如果函数调用成功,返回0,否则返回-1,错误值存放在errno中。 5、socketpair用例请参看【代码test1.1.c】 6、可以对套接口调用read、write、close 等函数,请参看【代码test1.2.c】 7、使用close关闭端口,接收端会收到文件结束符标志,close是全关闭,也就是说关闭了套接口后,既不能读也不能写。shutdown半关闭,也就是说不能写,但是可以使用该套接口从读取对端发送的数据。 #include sys/socket.h int shutdown (int s, int how); how 有三个可选值:SHUT_RD、SHUT_WR、SHUT_RDWR 如果函数调用成功,返回0,否则返回-1,错误值存放在errno中。 仅对套接口的写端进行关闭,可以解决如下问题: 内核缓冲区中任何将要发送的数据都将作废 向远程套接口发送文件结束标志,告诉对方进程,不再会向对方发送数据 本地半关闭的套接口仍然可以进行读操作 不管套接口的访问记数为多少,shutdown都将访问数清0。如果使用dup或dup2复制了套接口描述符,则只有所有的描述符都被close才能关闭套接口,而shutdown则能够一次性关闭复制的所有套接口。因此不论是要全关闭或半关闭套接口,都应该使用shutdown,而不是close。然而shutdown不会释放文件描述符,因此shutdown执行后,还应该调用close释放文件描述符。 8、当调用fork生成子进程时,任何在fork操作之前存在的套接口都将复制到子进程中【代码test1.2.c】。 9、关闭从套接口的读入将忽视任何等待读入的数据,如果有更多的数据从远程端发送过来,也将同样被忽视掉,如果这时进程尝试从套接口进行读入,就会发生错误。 第二章 域和地址族 1、套接口不一定需要地址,比如函数socketpair就生成了一对相互连接但是没有地址的套接口,这就是所谓的无名套接口。 2、匿名调用:在相互连接的两个套接口中有一个套接口不需要地址,例如连接到一个远程套接口时,只要确定远程套接口的地址,但是发出调用的本地套接口可以是匿名的。此时本地套接口不需要bind 3、socktpair 和 socket 函数都允许使用其他协议,而不只是TCP/IP 协议。 4、int socketpair ( int domain, int type, int protocol, int sv[2]); domain:套接口的域名,表示使用哪个地址族,要么是AF_LOCAL要么是AF_UNIX。地址族的作用是指明使用哪一种地址类型。AF_LOCAL(AF_UNIX)表示使用本地地址规则来生成地址,而AF_INET则表示使用IP地址规则生成地址(IPv4等) 一般情况下,protocol参数的值为0,这使操作系统可以选择适合所选domain的正确的缺省协议 5、通用地址结构 #include sys/socket.h struct socketaddr{ sa_family_t sa_fam

您可能关注的文档

文档评论(0)

wgvi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档