关于套接字描述符

什么是套接字描述符?(socket描述符)

套接字描述符是一个整数类型的值。每个进程的进程空间里都有一个套接字描述符表,该表中存放着套接字描述符和套接字数据结构的对应关系。该表中有一个字段存放新创建的套接字的描述符,另一个字段存放套接字数据结构的地址,因此根据套接字描述符就可以找到其对应的套接字数据结构。每个进程在自己的进程空间里都有一个套接字描述符表但是套接字数据结构都是在操作系统的内核缓冲里。

-------------------------------------------------------

套接字接口为网络通信增加了一个新的抽象,即套接字。和文件一样,每个活动的套接字都有一个整数来标识,我们将其称为套接字描述符。Windows操作系统为每个进程维护一个单独的套接字描述符表。因此,应用程序可以拥有相同的文件描述符和套接字描述符。

套接字API里有个函数socket,它就是用来创建一个套接字。套接字设计的总体思路是,单个系统调用就可以创建任何套接字,因为套接字是相当笼统的。一旦套接字创建后,应用程序还需要调用其他函数来指定具体细节。

了解套接字这个抽象概念的最简单的方法是想象一下操作系统中的数据结构。当应用程序调用socket后,操作系统分配一个新的数据结构来保存通信所需的信息,并在进程套接字描述符表内增加一个条目,存储指向这个数据结构的指针。下图显示了调用socket后的进程套接字描述符表。这里socket调用的参数指定了协议族为PF_INET,服务类型为SOCK_STREAM。

虽然套接字的内部数据结构包含很多字段,但是系统创建套接字后,大多数字字段没有填写。应用程序创建套接字后在该套接字可以使用之前,必须调用其他的过程来填充这些字段。

时间: 2024-11-12 18:30:30

关于套接字描述符的相关文章

UNIX网络编程卷1 服务器程序设计范式5 预先派生子进程,由父进程向子进程传递套接字描述符

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.只让你进程调用 accept,然后把所接受的已连接套接字"传递"给某个子进程. 这样做就不用因为所有子进程都调用 accept 而需提供上锁保护 2.父进程必须跟踪子进程的忙闲状态,以便给空闲子进程传递新的套接字 typedef struct { pid_t child_pid; /* 子进程的进程 ID */ int child_pipefd; /* 父进程中连接到该子进程

Linux网络编程--自定义套接字描述符判定函数issockettype

套接字描述符和通用文件描述符在形式上没有区别,那么如何判断一个文件描述符是否是套接字描述符呢?下面我们就简单的自定义一个函数issockettype,用于套接字描述符判定. #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> i

TCP协议的初始化及socket创建TCP套接字描述符

我们依然从start_kernel说起,它最后会执行: arch_call_rest_init() --> rest_init() --> Kernel_init() --> Kernei_init_freeable() --> do_basic_setup() --> do_initcalls() --> do_initcall_level(level) do_initcall_level(level)会根据level从0级开始以次执行相应先后等级的初始化函数. 第一

网络基础--对套接字描述符的本质理解

首先了解下数据在client与server端的通信中的收发过程 考虑单向的数据流,即 即A(客户端)向B(服务端)发送数据. 在ProgramA中,定义一个数组char buf[100] = "tcp" ;那么buf就是应用程序缓冲区,即图中A对应的圆内存,send / write函数对应上面蓝色的socket API,内核缓冲区对应黄色方形部分.可知,send的作用就是把应用程序缓冲区的数据拷贝到内核缓冲区而已.内核缓冲区的数据经过网卡,历经网络传到B端的网卡(TCP协议),然后进入

套接字描述符就绪条件

网络编程中,我们经常讨论等待某个描述符准备好I/O(读/写)或者等待其上发生一个待处理的异常条件.尽管可读性和可写性对于普通文件这样的描述符显而易见,然而对于引起诸如select返回套接字“就绪”的条件我们必须讨论的更明确些. 套接字准备好读的条件 a)该套接字接受缓冲区中的数据字节数大于等于套接字接受缓冲区低水位标记的当前大小.对这样的套接字执行读操作不会阻塞并将返回一个大于0的值(也 就是返回准备好读入的数据).我们可以使用SO_RCVLOWAT套接字选项设置该套接字的低水位标记.对于tcp

套接字文件描述符消耗小细节分析

套接字是通信端点的抽象.正如使用文件描述符访问文件,应用程序用套接字描述符访问套接字.套接字描述符在UNIX系统中被当作是一种文件描述符.事实上,许多处理文件描述符的函数(read和write)可以用于处理套接字描述符. ——<unix环境高级编程> WEB应用客户端(浏览器或APP等)与服务端的通信大多数是通过HTTP或HTTPS协议进行的.而套接字(Socket)应该算是OSI七层网络模型中应用层与传输层直接的抽象层,它是面向应用层的一个编程接口.而HTTP/HTTPS则位于应用层,就是通

套接字(Socket)描述符的使用情况

套接字是通信端点的抽象.正如使用文件描述符访问文件,应用程序用套接字描述符访问套接字.套接字描述符在UNIX系统中被当作是一种文件描述符.事实上,许多处理文件描述符的函数(read和write)可以用于处理套接字描述符. --<unix环境高级编程> WEB应用客户端(浏览器或APP等)与服务端的通信大多数是通过HTTP或HTTPS协议进行的.而套接字(Socket)应该算是OSI七层网络模型中应用层与传输层直接的抽象层,它是面向应用层的一个编程接口.而HTTP/HTTPS则位于应用层,就是通

通过UNIX域套接字传递文件描述符

传送文件描述符是高并发网络服务编程的一种常见实现方式.Nebula 高性能通用网络框架即采用了UNIX域套接字传递文件描述符设计和实现.本文详细说明一下传送文件描述符的应用. 1. TCP服务器程序设计范式 ??开发一个服务器程序,有较多的的程序设计范式可供选择,不同范式有其自身的特点和实用范围,明了不同范式的特性有助于我们服务器程序的开发.常见的TCP服务器程序设计范式有以下几种: 迭代服务器 并发服务器,每个客户请求fork一个子进程 预先派生子进程,每个子进程无保护地调用accept 预先

基本TCP套接字编程

1.socket函数在成功时返回一个小的非负整数值,它与文件描述符类似,称为套接字描述符.http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html