Socket与WSASocket的区别

问题1:WSASocket()和socket()函数两者有什么区别呀?
我在学windows网络编程时,看见有两个函数都是创建一个SOCKET,这两个函数创建出来的socket有什么区别呀?

他们只是获取的参数信息不同而已吗,是不是用在不同的地方?

SOCKET WSASocket(int af, int type, int protocol,
                 LPWSAPROTOCOL_INFO lpprotocolinfo,
                 GROUP g, DWORD dwflags)
SOCKET socket(int af, int type, int protocol)

socket和UNIX兼容,等价于用默认选项调用WSASocket。
WSASocket可以使用WinSock特有功能,比如重叠IO,用dwflags指定。


问题2:WSASocket中的WSA是什么意思?
wsa的a是指api,用于区别spi,因为在spi中还有wspsocket,wspaccept等...
在spi中:
WSP(Winsock提供者):用于传送服务提供者函数。
NSP(名字空间提供者):用于名字空间提供者函数。
WPU(Winsock提供者上调):供服务提供者调用的Ws2_ 32.dll支持函数使用。
WSC(Winsock配置):供在Winsock 2中安装服务提供者的函数使用。
再说一下winsock分两部分:winsock api,winsock spi。。。



WSASocket()在Socket()上扩展了一些功能,可以让你详细的来“定制”一个socket如果只是简单的使用就没有必要使用WSASocket()
 
WSASocket用于非阻塞,很好用,Socket用于阻塞,也可采用多线程实现非阻塞


没多大差别,一个是socket1,一个是socket2,不过你想跨平台调用,就要用socket1的函数,因为socket2是微软专门为未来扩展搞的东西,linux/UNIX不知道





WSASocket()
简述:创建一个与指定传送服务提供者捆绑的套接口,可选地创建和/或加入一个套接口组。
 
#include <winsock2.h>

SOCKET WSAAPI WSASocket ( int af, int type, int protocol, LPPROTOCOL_INFO lpProtocolInfo, Group g,int iFlags);

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参数非法。



参考链接:

http://hanyahui2003.blog.163.com/blog/static/3197612200702071453898/

http://blog.163.com/zb_wenwu1/blog/static/5875334200981741350204/








你可能感兴趣的:(Socket与WSASocket的区别)