欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
Socket
来自开放百科 - 灰狐
(版本间的差异)
第1行: | 第1行: | ||
− | |||
− | |||
本地管理:socket接口为管理本地上下文信息提供以下函数: | 本地管理:socket接口为管理本地上下文信息提供以下函数: | ||
*socket:分配最小的未用socket句柄; | *socket:分配最小的未用socket句柄; |
2010年9月21日 (二) 15:42的最后版本
本地管理: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和基于定时器的事件多路分离。
相关链接
分享您的观点