1、WSAStartup
函数结构:
Int WSAStartup(WORD wVersionRequested,
LPWSDATA lpWSAData)
作用:
载入合适的Winsock动态链接库
参数解析:
wVersionRequested:指定加载的WinSocket版本信息,windows2000后面采用罪行的0x0202版本,用宏 MAKEWODE(X,Y)获得wVersionRequested,X高位字节,Y地位字节
lpWSAData:指向LPWSAData的机构体,
typedef struct WSAData
{
WORD wVersion;
WORD wHighVersion;
Char szDescription[WSDESCRIPTION_LEN + 1];
Char szSystemStatus[WSASYS_STATUS_LEN + 1];
Unsigned short iMaxSockets;
Unsigned short iMaxUdpDg;
Char FAR * lpVendorInfo;
}
wVersion为你将使用的Winsock版本号,wHighVersion为载入的Winsock动态库支持的最高版本,注意,它们的高节代表次版本,低字节代表主版本。
szDescription与szSystemStatus由特定版本的Winsock设置,实际上没有太大用处。
iMaxSockets表示最大数量的并发Sockets,其值依赖于可使用的硬件资源。
iMaxUdpDg表示数据报的最大长度;然而,获取数据报的最大长度,你需要使用WSAEnumProtocols对协议进行查询。最大数量的并发Sockets并不是什么神奇的数字,它是由可用的物理资源来决定的.
lpVendorInfo是为Winsock实现而保留的制造商信息,这个在Windows平台上并没有什么用处.
Windows 95 采用的winsocket版本是1.1(可以升级到2.2), windows 98 后采用的都是2.2,windows CE只能支持winsocket1.1版本
2、WSAClearup
函数结构:
Int WSAClearup(void)
函数作用:
释放WinSocket的连接,必须与WSAStartup成对出现
3、WSAGetLastError
函数结构
Int WSAGetLastError(void)
函数作用:
获取错误信息,WinSocket函数调用失败都会返回-1(SOCKET_ERROR),通过WSAGetlastError函数可以获得更详细的信息
常见的错误:
WSANOTINITIALISED: WSAStratup没有正确启动
WSAENETDOWN:
….
可以查询MSDN Windows Sockets Error Codes
4、socket/WSASocket
函数结构:SOCKET WSASocket(int af,
Int type,
Int protocol,
LPWSAPROTOCOL_INFO lpWSAProtocolInfo,
GROUP g,
DWORD dwFlags)
SOCKET socket(int af,
Int type,
Int protocol)
函数作用:创建SOCKET实例(套接口)
参数解析:
af:地址族描述。目前仅支持PF_INET格式,亦即ARPA Internet地址格式。
type:新套接口的类型描述。
protocol:套接口使用的特定协议,如果调用者不愿指定协议则定为0。
lpProtocolInfo:一个指向PROTOCOL_INFO结构的指针,该结构定义所创建套接口的特性。如果本参数非零,则前三个参数(af, type, protocol)被忽略。
g:套接口组的描述字。
iFlags:套接口属性描述。
返回值:
若无错误发生,WSASocket()返回新套接口的描述字。否则的话,返回 INVALID_SOCKET,应用程序可定调用 WSAGetLastError()来获取相应的错误代码。
错误代码:
WSANOTINITIALISED 在调用本API之前应成功调用WSAStartup()。
WSAENETDOWN 网络子系统失效。
WSAEAFNOSUPPORT 不支持指定的地址族。
WSAEINPROGRESS 一个阻塞的WinSock调用正在进行中,或者服务提供者仍在处理一个回调函数
WSAEMFILE 无可用的套接口描述字。
WSAENOBUFS 无可用的缓冲区空间。套接口无法创建。
WSAEPROTONOSUPPORT 不支持指定的协议。
WSAEPROTOTYPE 指定的协议对于本套接口类型错误。
WSAESOCKTNOSUPPORT 本地址族不支持指定的套接口类型。
WSAEINVAL g参数非法。
实例代码:
// 创建TCP套接字
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPRPTP_TCP);
不同的协议创建的套接字都一样,详见WINDOWS网络编程技术 第六章