WSAStartup( )

这里用通俗的语言解释一下这个函数,就类似于opencv一样,要添加链接库函数,cv.lib等,要添加到附加依赖项,或者通过#pragma comment(lib,”cv.lib“)一样,然后才能包含头文件进行各种函数的调用。当然了,socket编程要调用各种socket函数,但是需要库Ws2_32.lib和头文件Winsock2.h,这里的WSAStartup就是为了向操作系统说明,我们要用哪个库文件,让该库文件与当前的应用程序绑定,从而就可以调用该版本的socket的各种函数了。

头文件 header:  Winsock2.h

库library:      Ws2_32.lib
原型:int 
 PASCAL   FAR
 WSAStartup (
WORD  wVersionRequested, LPWSADATA  
lpWSAData );
参数:wVersionRequested是Windows Sockets API提供的调用方可使用的最高版本号。高位字节指出副版本(修正)号,低位字节指明主版本号。
       
lpWSAData 是指向WSADATA数据结构指针,用来接收Windows
Sockets实现的细节

WSADATA数据类型:这个结构被用来存储
WSAStartup函数调用后返回的 Windows
Sockets
数据。它包含Winsock.dll执行的数据。

  结构原型:  

struct WSAData {

  WORD
wVersion;

  WORD
wHighVersion;

  char
szDescription[WSADESCRIPTION_LEN+1];

  char
szSystemStatus[WSASYSSTATUS_LEN+1];

  unsigned short
iMaxSockets;

  unsigned short
iMaxUdpDg;

  char
*lpVendorInfo;};

  WSADATA结构被用来保存函数WSAStartup返回的Windows
Sockets初始化信息。

  成员:

  wVersion

  Windows Sockets
DLL期望调用者使用的Windows Sockets规范的版本。 高位字节存储副版本号,
低位字节存储主版本号,可以用WORD MAKEWORD(BYTE,BYTE ) 返回这个值,例如:MAKEWORD(1,1)

  wHighVersion

  这个DLL能够支持的Windows
Sockets规范的最高版本。通常它与wVersion相同。

  szDescription

  以null结尾的ASCII字符串,Windows Sockets
DLL将对Windows Sockets实现的描述拷贝到这个字符串中,包括制造商标识。文本(最多可以有256个字符)可以包含任何字符,但是要注意不能包含控制字符和格式字符,应用程序对其最可能的使用方式是把它(可能被截断)显示在在状态信息中。

  szSystemStatus

  以null结尾的ASCII字符串,Windows Sockets
DLL把有关的状态或配置信息拷贝到该字符串中。Windows
Sockets DLL应当仅在这些信息对用户或支持人员有用时才使用它们,它不应被作为szDescription域的扩展。

  iMaxSockets

  单个进程能够打开的socket的最大数目。Windows
Sockets的实现能提供一个全局的socket池,可以为任何进程分配;或者它也可以为socket分配属于进程的资源。这个数字能够很好地反映Windows
Sockets DLL或网络软件的配置方式。应用程序的编写者可以通过这个数字来粗略地指明Windows
Sockets的实现方式对应用程序是否有用。例如,X
Windows服务器在第一次启动的时候可能会检查iMaxSockets的值:如果这个值小于8,应用程序将显示一条错误信息,指示用户重新配置网络软件(这是一种可能要使用szSystemStatus文本的场合)。显然无法保证某个应用程序能够真正分配iMaxSockets个socket,因为可能有其它WindowsSockets应用程序正在使用。

  iMaxUdpDg
Windows Sockets应用程序能够发送或接收的最大的用户数据包协议(UDP)的数据包大小,以字节为单位。如果实现方式没有限制,那么iMaxUdpDg为零。在Berkeley
sockets的许多实现中,对于UDP数据包有个固有的限制(在必要时被分解),大小为8192字节。Windows
Sockets的实现可以对碎片重组缓冲区的分配作出限制。对于适合的WindowsSockets 实现,iMaxUdpDg的最小值为512。注意不管iMaxUdpDg的值是什么,都不推荐你发回一个比网络的最大传送单元(MTU)还大的广播数据包。(Windows Sockets
API 没有提供发现MTU的机制,但是它不会小于512个字节)。WinSock2.0版中已被废弃。

  lpVendorInfo 指向销售商的数据结构的指针。这个结构的定义(如果有)超出了WindowsSockets规范的范围。WinSock2.0版中已被废弃。

其实说白了wsastartup主要就是进行相应的socket库绑定。

WSAStartup( ),布布扣,bubuko.com

时间: 2025-01-02 09:15:02

WSAStartup( )的相关文章

WSAStartup()函数的使用

int WSAStartup( __in WORD wVersionRequested, __out LPWSADATA lpWSAData ); WSAStartup 格  式: int PASCAL FAR WSAStartup( WORD wVersionRequested,  LPWSADATA lpWSAData ); 参  数:  wVersionRequested 欲使用的 Windows Sockets API 版本 lpWSAData  指向 WSADATA 资料的指标 传回值

WSAStartup function

[WSAStartup function] Parameters wVersionRequested [in] The highest version of Windows Sockets specification that the caller can use. The high-order byte specifies the minor version number; the low-order byte specifies the major version number. lpWSA

WSAStartup函数

函数WSAStartup 一.WSAStartup函数                 int WSAStartup                       (                           WORD wVersionRequested,                           LPWSADATA lpWSAData                          ); 使 用Socket的程序在使用Socket之前必须调用WSAStartup函数.该函数

c++网络编程错误(WSAStartup)

在使用CodeBlocks编译C++程序时, 编译程序的时候出现如下错误: undefined reference to `[email protected]'undefined reference to `[email protected]'undefined reference to `[email protected]'undefined reference to `[email protected]'undefined reference to `[email protected]'un

【转】Windows Error Code(windows错误代码详解)

本文来自: http://blog.sina.com.cn/s/blog_5e45d1be0100i0dr.html http://blog.sina.com.cn/s/blog_5e45d1be0100i0dt.html http://blog.sina.com.cn/s/blog_5e45d1be0100i0dv.html 这三篇,因为格式实在太乱,因此拿来整理了一下.找这个的原因是今天在改程序的时候蹦出来个WindowsError: [Error 2],也没有说这个东西是什么错误.于是百度

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)

[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序:httpd.exe. 假设 Visual Studio 2005 的安装路径为“D:\Program

将socket程序从linux移植到windows上

今天突然想试下纯socket编程在两个系统上代码重合量有多大,只要不使用VC自定义的宏(比如SOCKET.SOCKADDR等等)感觉代码重合量挺大的. 比如最简单的TCP客户端和服务端对话,在VC中用int取代SOCKET宏,用struct sockaddr_in取代SOCKADDR_IN宏. 然后区别就仅仅是头文件和windows额外加载/关闭套接字库的代码了. // Unix/Linux#include <sys/socket.h> #include <netinet/in.h>

1 Linux 安装 Libevent

Libevent官网:http://libevent.org/ 在线文档:http://www.wangafu.net/~nickm/libevent-2.0/doxygen/html/ 下载地址:https://github.com/libevent/libevent/releases/ 解压,编译,安装 创建文件夹 [email protected]:~$ mkdir libevent [email protected]:~$ cd libevent/ 解压文件: [email protec

Winsock 入门 Echo 示例

1 #include <stdio.h> 2 #include <winsock2.h> 3 4 #pragma comment(lib, "ws2_32") /* WinSock 使用的库函数 */ 5 6 #define ECHO_DEF_PORT 7 /* 侦听的缺省端口 */ 7 #define ECHO_BUF_SIZE 256 /* 缓冲区的大小 */ 8 9 int main(int argc, char **argv) 10 { 11 WSADA