16.2 套接字库函数
Windows Socket规范定义了一组套接字函数,用于完成Socket编程(www.cppentry.com),还定义了一组用于处理域名、通信协议等数据的数据库函数。为了与Windows编程(www.cppentry.com)模型一致,微软提供了一组扩展的Socket函数。本节将分别介绍这3组函数。
16.2.1 套接字函数
Windows Socket规范包含实现Socket编程(www.cppentry.com)的套接字函数,如表16-2所示。
表16-2 套接字函数
|
套接字函数< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
功 能 |
|
accept() |
当有客户端Socket连接到服务器Socket
上时,服务器使用此函数接收客户端的连接。
此函数的返回值为新建的socket,维护与客
户端Socket之间的通信,服务器可以维护多
个客户端的Socket连接。此函数仅对面向连
接的套接字有效 |
|
bind() |
服务器Socket使用此函数绑定到本地的指定
端口。当指定端口有连接到来时,可以通知服
务器Socket,再由其决定接受(accept)socket
连接还是拒绝 |
|
closesocket() |
关闭socket。对于没有设置超时时间的阻
塞socket,此函数仅仅阻塞socket通信 |
|
connect() |
在指定socket上初始化连接,客户端socket
使用此函数连接到服务器socket |
|
getpeername() |
获取指定socket连接对端的名称 |
|
getsockname() |
获取socket绑定的本地地址 |
|
getsockopt() |
获取与指定socket相连的选项 |
|
htonl() |
将32位的整数从主机字节顺序转换成网络字节顺序 |
|
htons() |
将16位的整数从主机字节顺序转换成网络字节顺序 |
|
inet_addr() |
将使用点号分隔的IP地址转换成Internet地址值 |
|
inet_ntoa() |
将Internet地址值转换成使用点号分隔
的IP地址,如192.168.111.1 |
|
ioctlsocket() |
提供socket控制 |
|
listen() |
服务器socket调用此函数启动监听,开
始监听是否有客户端socket连接 |
|
ntohl() |
将32位的整数从网络字节顺序转换成主机字节顺序 |
|
ntohs() |
将16位的整数从网络字节顺序转换成主机字节顺序 |
|
recv() |
从无连接的或面向连接的socket处接收数据 |
|
recvfrom() |
从无连接的socket处接收数据 |
|
select() |
处理多个I/O同步 |
|
send() |
发送数据到面向连接的socket |
|
sendto() |
发送数据到面向连接或无连接的socket |
|
setsockopt() |
设置指定socket的选项 |
|
shutdown() |
断开socket的双向通信 |
|
socket() |
创建通信的socket对象,并返回socket信息 |
上面函数列出了编写Socket程序的所需要的函数,要想编写高效、稳定的socket程序,需要深入掌握这些函数。