socket和端口理解.txt爱一个人很难,恨一个人更难,又爱又恨的人最难。爱情永远不可能是天平,想在爱情里幸福就要舍得伤心!有些烦恼是我们凭空虚构的,而我们却把它当成真实去承受。socket和端口理解2009-05-19 00:03//
一个socket句柄代表两个地址对 “本地ip:port”--“远程ip:port”
在windows下叫句柄,在linux下叫文件描述符
socket为内核对象,由操作系统内核来维护其缓冲区,引用计数,并且可以在多个进程中使用。
至于称它为“句柄”“文件描述符”都是一样的
///aezealer/blog/item/3b1582f4909da9e77609d795.html转载于
首先,随着时间的推移,我会不断地向这篇里面加东西,知道我认为应该结束了为止。 这篇文档实际上是我的学习小结的一部分,所以如果有人能够来信指出其中的错误或不 足,那我可是感激淋涕了。
我假定读者已经对于socket连接的建立过程和各种状态转换比较熟悉了,因为这篇文档的 目的是澄清概念,而不是介绍概念。
在使用socket编程时,我们都知道在网络通信以前首先要建立连接,而连接的建立是通过 对socket的一些操作来完成的。那么,建立连接的过程大致可以分为以下几步:
1. 建立socket套接字。
2. 给套接字赋予地址,这个地址不是通常的网络地址的概念。
3. 建立socket连接。
1. 建立socket套接字。
使用socket建立套接字的时候,我们实际上是建立了一个数据结构。这个数据结构最主要 的信息是指定了连接的种类和使用的协议,此外还有一些关于连接队列操作的结构字段 (这里就先不涉及他们了)。
当我们使用socket函数以后,如果成功的话会返回一个int型的描述符,它指向前面那个 被维护在内核里的socket数据结构。我们的任何操作都是通过这个描述符而作用到那个数 据结构上的。这就像是我们在建立一个文件后得到一个文件描述符一样,对文件的操作都 是通过文件描述符来进行的,而不是直接作用到inode数据结构上。我之所以用文件描述 符举例,是因为socket数据结构也是和inode数据结构密切相关,它不是独立存在于内核 中的,而是位于一个VFS inode结构中。所以,有一些比较抽象的特性,我们可以用文件 操作来不恰当的进行类比以加深理解。
…… …… 余下全文