Socket

来自开放百科 - 灰狐
2010年9月21日 (二) 15:42Allen (讨论 | 贡献)的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到: 导航, 搜索

本地管理:socket接口为管理本地上下文信息提供以下函数:

  • socket:分配最小的未用socket句柄;
  • bind:将socket句柄与本地或远地地址相关联;
  • getsockname和getpeername:分别确定socket所连接的本地或远地地址;
  • close:释放socket句柄,使它可用于后面的复用。

连接建立和连接终止:socket接口为建立和终止连接提供以下函数:

  • connect:客户通常使用connect来主动地与服务器建立连接;
  • listen:服务器使用listen来指示它想要被动地侦听进入的客户连接请求;
  • accept:服务器使用accept来创建新的通信端点,以为客户服务;
  • shutdown:有选择地终止一个双向连接的读端和/或写端流。

数据传输机制:socket接口提供以下函数来发送和接收数据:

  • read/write:通过特定句柄接收和传输数据缓冲区;
  • send/recv:与read/write类似,但它们提供一个额外的参数来控制特定的socket特有操作(比如交换“紧急”数据,或“偷看”接收队列中的数据,而又不把它从队列中移除);
  • sendto/recvfrom:交换无连接数据报;
  • readv/writev:分别支持“分散读”和“集中写”语义(这些操作优化用户/内核模式切换并简化内存管理);
  • sendmsg/recvmsg:通用函数,包含了所有其他数据传输函数的行为。对于UNIX域的socket,sendmsg和recvmsg函数还提供在同一主机的任意进程间传递“访问权限”(比如打开文件句柄)的能力。

注意这些接口也可被用于其他类型的I/O,比如文件和终端。

选项(option)管理:socket接口定义以下函数,允许用户改变socket行为的缺省语义:

  • setsockopt和getsockopt:修改或查询在协议栈不同层次中的选项。选项包括多点传送、广播,以及设置/获取发送和接收传输缓冲区的大小;
  • fcntl和ioctl:是UNIX系统调用,使在socket上能够进行异步I/O、非阻塞I/O,以及紧急消息递送。

除了上面描述的socket函数,通信软件还可使用以下标准库函数和系统调用:

  • gethostbyname和gethostbyaddr:处理网络寻址的多种情况,比如映射主机名到IP地址;
  • getservbyname:通过服务的端口号或人类可读的名字来对它们进行标识;
  • ntohl、ntohs、htonl、htons:执行网络字节序转换;
  • select:在成组的打开的句柄上执行基于I/O和基于定时器的事件多路分离。

相关链接

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱