Muchas veces es difícil encontrar las funciones de WinSock para VB, así que recopilé todas las funciones, estructuras, constantes, etc. que se usan para manipular sockets en Windows.
También puse algunas funciones básicas para ejemplificar el uso de las funciones...
Código:
'*************************************************************
'¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
' Application Programming Inteface (API) for WinSock
'
'Este módulo contiene todas las declaraciones necesarias para
'utilizar los sockets de sistema. El funcionamiento y ejemplo
'de estas funciones se pueden encontrar en MSDN:
'
'
Para ver este enlace Registrate o Inicia Sesion'
'Autor: Slasher Keeper

'Fuente: MSDN Library
'
'¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
'**************************************************************
Option Explicit
#Const WS_CURVERSION = 2
Public Const WS_VERSION_REQ
D = &H101
Public Const WS_VERSION_MAJ
OR = WS_VERSION_REQ
D \ &H100 And &HFF&
Public Const WS_VERSION_MIN
OR = WS_VERSION_REQ
D And &HFF&
Public Const MIN_SOCKETS_RE
QD = 1
Public Const SOCKET_ERROR = -1
Public Const WSADescription
_Len = 256
Public Const WSASYS_Status_
Len = 128
Public Const FD_SETSIZE = 64
'Network Events.
'
Public Const FD_READ_BIT = 0
Public Const FD_READ = 1
Public Const FD_WRITE_BIT = 1
Public Const FD_WRITE = 2
Public Const FD_OOB_BIT = 2
Public Const FD_OOB = 4
Public Const FD_ACCEPT_BIT = 3
Public Const FD_ACCEPT = 8
Public Const FD_CONNECT_BIT = 4
Public Const FD_CONNECT = 16
Public Const FD_CLOSE_BIT = 5
Public Const FD_CLOSE = 32
Public Const FD_QOS_BIT = 6
Public Const FD_QOS = 64
Public Const FD_GROUP_QOS_B
IT = 7
Public Const FD_GROUP_QOS = 128
Public Const FD_ROUTING_INT
ERFACE_CHANGE_
BIT = 8
Public Const FD_ROUTING_INT
ERFACE_CHANGE = 256
Public Const FD_ADDRESS_LIS
T_CHANGE_BIT = 9
Public Const FD_ADDRESS_LIS
T_CHANGE = 512
Public Const FD_MAX_EVENTS = 10
Public Const FD_ALL_EVENTS = 1023
'Namespaces.
'
Public Const NS_ALL = 0
Public Const NS_SAP = 1
Public Const NS_NDS = 2
Public Const NS_PEER_BROWSE = 3
Public Const NS_TCPIP_LOCAL = 10
Public Const NS_TCPIP_HOSTS = 11
Public Const NS_DNS = 12
Public Const NS_NETBT = 13
Public Const NS_WINS = 14
Public Const NS_NBP = 20
Public Const NS_MS = 30
Public Const NS_STDA = 31
Public Const NS_NTDS = 32
Public Const NS_X500 = 40
Public Const NS_NIS = 41
Public Const NS_NISPLUS = 42
Public Const NS_WRQ = 50
Public Const SERVICE_REGIST
ER = 1
Public Const SERVICE_DEREGI
STER = 2
Public Const SERVICE_FLUSH = 3
Public Const SERVICE_FLAG_H
ARD = &H2
Enum SearchControlF
lags
LUP_DEEP = &H1
LUP_CONTAINERS = &H2
LUP_NOCONTAINE
RS = &H4
LUP_NEAREST = &H8
LUP_RETURN_NAM
E = &H10
LUP_RETURN_TYP
E = &H20
LUP_RETURN_VER
SION = &H40
LUP_RETURN_COM
MENT = &H80
LUP_RETURN_ADD
R = &H100
LUP_RETURN_BLO
B = &H200
LUP_RETURN_ALI
ASES = &H400
LUP_RETURN_QUE
RY_STRING = &H800
LUP_RETURN_ALL = &HFF0
LUP_RES_SERVIC
E = &H8000
LUP_FLUSHCACHE = &H1000
LUP_FLUSHPREVI
OUS = &H2000
End Type
'Protocolos
'
Enum SockProtocols
IPPROTO_IP = 0 'dummy for IP
IPPROTO_ICMP = 1 'control message protocol
IPPROTO_IPIP = 4
IPPROTO_GGP = 2 ' gateway^2 (deprecated)
IPPROTO_TCP = 6 ' tcp
IPPROTO_EGP = 8
IPPROTO_PUP = 12 ' pup
IPPROTO_UDP = 17 ' user datagram protocol
IPPROTO_IDP = 22 ' xns idp
IPPROTO_ND = 77 ' UNOFFICIAL net disk proto
NSPROTO_IPX = 1000
NSPROTO_SPX = 1256
NSPROTO_SPXII = 1257
End Enum
'Socket types.
'
Enum SockTypes
SOCK_STREAM = 1 'Envía datos como flujo de bytes.
SOCK_DGRAM = 2 'Datagrama. Protocolo de conexión.
SOCK_RAW = 3 '

SOCK_RDM = 4 'Reliably-Delivered Message (Mensaje confiablemente-entregado)
'Es un protocolo que conserva los límites del mensaje en los
'datos
SOCK_SEQPACKET = 5 'Flujo de paquetes secuenciados. Es esencialmente igual
'que SOCK_RDM.
End Enum
Enum SockPorts
'
'Standard well-known ports
'
IPPORT_ECHO = 7
IPPORT_DISCARD = 9
IPPORT_SYSTAT = 11
IPPORT_DAYTIME = 13
IPPORT_NETSTAT = 15
IPPORT_FTP = 21
IPPORT_TELNET = 23
IPPORT_SMTP = 25
IPPORT_TIMESER
VER = 37
IPPORT_NAMESER
VER = 42
IPPORT_WHOIS = 43
IPPORT_MTP = 57
IPPORT_TFTP = 69
IPPORT_RJE = 77
IPPORT_FINGER = 79
IPPORT_TTYLINK = 87
IPPORT_SUPDUP = 95
IPPORT_EXECSER
VER = 512
IPPORT_LOGINSE
RVER = 513
IPPORT_CMDSERV
ER = 514
IPPORT_EFSSERV
ER = 520
'UDP ports.
'
IPPORT_BIFFUDP = 512
IPPORT_WHOSERV
ER = 513
IPPORT_ROUTESE
RVER = 520
'Los puertos menores a este valor están reservados para
'procesos con provilegios.
'
IPPORT_RESERVE
D = 1024
'Los puertos mayores a este valor están reservados para
'procesos sin privilegios.
'
IPPORT_USERRES
ERVED = 5000
End Enum
Enum SockErrors
'
'Windows Sockets definitions of regular Berkeley error constants
'
WSABASEERR = 10000
WSAEWOULDBLOCK = (WSABASEERR + 35)
WSAEINPROGRESS = (WSABASEERR + 36)
WSAEALREADY = (WSABASEERR + 37)
WSAENOTSOCK = (WSABASEERR + 38)
WSAEDESTADDRRE
Q = (WSABASEERR + 39)
WSAEMSGSIZE = (WSABASEERR + 40)
WSAEPROTOTYPE = (WSABASEERR + 41)
WSAENOPROTOOPT = (WSABASEERR + 42)
WSAEPROTONOSUP
PORT = (WSABASEERR + 43)
WSAESOCKTNOSUP
PORT = (WSABASEERR + 44)
WSAEOPNOTSUPP = (WSABASEERR + 45)
WSAEPFNOSUPPOR
T = (WSABASEERR + 46)
WSAEAFNOSUPPOR
T = (WSABASEERR + 47)
WSAEADDRINUSE = (WSABASEERR + 48)
WSAEADDRNOTAVA
IL = (WSABASEERR + 49)
WSAENETDOWN = (WSABASEERR + 50)
WSAENETUNREACH = (WSABASEERR + 51)
WSAENETRESET = (WSABASEERR + 52)
WSAECONNABORTE
D = (WSABASEERR + 53)
WSAECONNRESET = (WSABASEERR + 54)
WSAENOBUFS = (WSABASEERR + 55)
WSAEISCONN = (WSABASEERR + 56)
WSAENOTCONN = (WSABASEERR + 57)
WSAESHUTDOWN = (WSABASEERR + 58)
WSAETOOMANYREF
S = (WSABASEERR + 59)
WSAETIMEDOUT = (WSABASEERR + 60)
WSAECONNREFUSE
D = (WSABASEERR + 61)
WSAELOOP = (WSABASEERR + 62)
WSAENAMETOOLON
G = (WSABASEERR + 63)
WSAEHOSTDOWN = (WSABASEERR + 64)
WSAEHOSTUNREAC
H = (WSABASEERR + 65)
WSAENOTEMPTY = (WSABASEERR + 66)
WSAEPROCLIM = (WSABASEERR + 67)
WSAEUSERS = (WSABASEERR + 68)
WSAEDQUOT = (WSABASEERR + 69)
WSAESTALE = (WSABASEERR + 70)
WSAEREMOTE = (WSABASEERR + 71)
WSAEDISCON = (WSABASEERR + 101)
End Enum
Enum SockAddressFam
ilies
AF_UNSPEC = 0 'unspecified
AF_UNIX = 1 'local to host (pipes, portals)
AF_INET = 2 'internetwork: UDP, TCP, etc.
AF_IMPLINK = 3 'arpanet imp addresses
AF_PUP = 4 'pup protocols: e.g. BSP
AF_CHAOS = 5 'mit CHAOS protocols
AF_IPX = 6 'IPX and SPX
AF_NS = 6 'XEROX NS protocols
AF_ISO = 7 'ISO protocols
AF_OSI = AF_ISO 'OSI is ISO
AF_ECMA = 8 'european computer manufacturers
AF_DATAKIT = 9 'datakit protocols
AF_CCITT = 10 'CCITT protocols, X.25 etc
AF_SNA = 11 'IBM SNA
AF_DECnet = 12 'DECnet
AF_DLI = 13 'Direct data link interface
AF_LAT = 14 'LAT
AF_HYLINK = 15 'NSC Hyperchannel
AF_APPLETALK = 16 'AppleTalk
AF_NETBIOS = 17 'NetBios-style addresses
End Enum
Type SOCKADDR
sa_family As Integer
sa_data As String * 14
End Type
Type IN_ADDR
s_b1 As Byte
s_b2 As Byte
s_b3 As Byte
s_b4 As Byte
s_w1 As Integer
s_w2 As Integer
End Type
Type SOCKADDR_IN
sin_family As Integer
sin_port As Integer
sin_addr As IN_ADDR
sin_zero As String * 8
End Type
Type OVERLAPPED
Internal As Long
InternalHigh As Long
Offset As Long
OffsetHigh As Long
hEvent As Long
End Type
Type CSADDR_INFO
LocalAddr As Long
RemoteAddr As Long
iSocketType As Long
iProtocol As SockProtocols
End Type
Type HOSTENT
h_name As Long 'official name of host
h_aliases As Long 'alias list
h_addrtype As Integer 'host address type
h_length As Integer
h_addr_list As Long 'list of addresses
End Type
Type PROTOENT
p_name As String
p_aliases(15) As String
p_proto As Integer
End Type
Type SERVENT
s_name As String
s_aliases(15) As String
s_port As Integer
s_proto As String
End Type
Type SERVICE_ADDRES
S
dwAddressType As Long
dwAddressFlags As Long
dwAddressLengt
h As Long
dwPrincipalLen
gth As Long
lpAddress As Byte
lpPrincipal As Byte
End Type
Type SERVICE_ADDRES
SES
dwAddressCount As Long
Addresses(1) As SERVICE_ADDRES
S
End Type
Type BLOB
cbSize As Long
pBlobData As Byte
End Type
Type SERVICE_INFO
lpServiceType As Long
lpServiceName As String
lpComment As String
lpLocale As String
dwDisplayHint As Long
dwVersion As Long
dwTime As Long
lpMachineName As String
lpServiceAddre
ss As SERVICE_ADDRES
SES
ServiceSpecifi
cInfo As BLOB
End Type
Type NS_SERVICE_INF
O
dwNameSpace As Long
ServiceInfo As SERVICE_INFO
End Type
Type WSADATA
wversion As Integer
wHighVersion As Integer
szDescription(0 To WSADescription
_Len) As Byte
szSystemStatus(0 To WSASYS_Status_
Len) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpszVendorInfo As Long
End Type
Type LARGE_INTEGER
lowpart As Long
highpart As Long
End Type
Type FD_SET
fd_count As Long
fd_array(FD_SETSIZE) As Long
End Type
Type TIMEVAL
tv_sec As Long
tv_usec As Long
End Type
Type TRANSMIT_FILE_
BUFFERS
Head As Long
HeadLength As Long
Tail As Long
TailLength As Long
End Type
Type FLOWSPEC
TokenRate As Long 'In Bytes/sec
TokenBucketSiz
e As Long 'In Bytes
PeakBandwidth As Long 'In Bytes/sec
Latency As Long 'In microseconds
DelayVariation As Long 'In microseconds
ServiceType As Integer 'Guaranteed, Predictive,
'Best Effort, etc.
MaxSduSize As Long 'In Bytes
MinimumPoliced
Size As Long 'In Bytes
End Type
Type PROTOCOL_INFO
dwServiceFlags As Long
iAddressFamily As Long
iMaxSockAddr As Long
iMinSockAddr As Long
iSocketType As Long
iProtocol As Long
dwMessageSize As Long
lpProtocol As Long
End Type
Declare Function accept Lib "ws2_32" (ByVal sck As Long, addr As SOCKADDR, AddrLen As Integer) As Long
Declare Function AcceptEx Lib "ws2_32" (ByVal sListenSocket As Long, ByVal sAcceptSocket As Long, lpOutputBuffer As Any, ByVal dwReceiveDataL
ength As Long, ByVal dwLocalAddress
Length As Long, ByVal dwRemoteAddres
sLength As Long, lpdwBytesRecei
ved As Long, lpOverlapped As OVERLAPPED) As Long
Declare Function bind Lib "ws2_32" (ByVal sck As Long, name As SOCKADDR, ByVal namelen As Long) As Long
Declare Function closesocket Lib "ws2_32" (ByVal sck As Long) As Long
Declare Function Connect Lib "ws2_32" (ByVal sck As Long, ByVal SckName As String, ByVal namelen As Long) As Long
Declare Function EnumProtocols Lib "ws2_32" Alias "EnumProtocolsA" (ByVal lpiProtocols As SockProtocols, ByVal lpProtocolBuff
er As PROTOCOL_INFO, ByVal lpdwBufferLeng
th As Long)
Declare Sub GetAcceptExSoc
kaddrs Lib "ws2_32" (lpOutputBuffer As Any, ByVal dwReceiveDataL
ength As Long, ByVal dwLocalAddress
Length As Long, ByVal dwRemoteAddres
sLength As Long, LocalSockaddr As Long, LocalSockaddrL
ength As Long, RemoteSockaddr As Long, RemoteSockaddr
Length As Long)
Declare Function GetAddressByNa
me Lib "ws2_32" Alias "GetAddressByNa
meA" (ByVal dwNameSpace As Long, ByVal lpServiceType As Long, ByVal lpServiceName As Long, ByVal lpiProtocols As SockProtocols, ByVal dwResolution As Long, ByVal lpServiceAsync
Info As Long, lpCsaddrBuffer As CSADDR_INFO, ByVal lpdwBufferLeng
th As Long, ByVal lpAliasBuffer As Long, ByVal lpdwAliasBuffe
rLength As Long) As Long
Declare Function gethostbyaddr Lib "ws2_32" (ByVal addr As String, ByVal iaddrlen As Long, ByVal iaddrtype As Long) As HOSTENT
Declare Function gethostbyname Lib "ws2_32" (ByVal hostname As String) As Long
Declare Function gethostname Lib "ws2_32" (ByVal name As String, ByVal namelen As Long) As Long
Declare Function GetNameByType Lib "ws2_32" Alias "GetNameByTypeA" (ByVal lpServiceType As Long, ByVal lpServiceName As String, ByVal dwNameLength As Long) As Long
Declare Function getpeername Lib "ws2_32" (ByVal sck As Long, name As SOCKADDR, ByVal namelen As Long) As Long
Declare Function getprotobyname Lib "ws2_32" (ByVal name As String) As PROTOENT
Declare Function getprotobynumb
er Lib "ws2_32" (ByVal Number As Long) As PROTOENT
Declare Function getservbyname Lib "ws2_32" (ByVal name As String, ByVal proto As String) As SERVENT
Declare Function getservbyport Lib "ws2_32" (ByVal port As Integer, ByVal proto As String) As SERVENT
Declare Function GetService Lib "ws2_32" Alias "GetServiceA" (ByVal dwNameSpace As Long, ByVal lpGuid As Long, ByVal lpServiceName As String, ByVal dwProperties As Long, lpBuffer As NS_SERVICE_INF
O, ByVal lpdwBufferSize As Long, ByVal lpServiceAsync
Info As Long) As Long
Declare Function GetSockName Lib "ws2_32" Alias "GetSockNameA" (ByVal sck As Long, name As Long, ByVal namelen As Long) As Long
Declare Function getsockopt Lib "ws2_32" (ByVal sck As Long, ByVal level As Long, ByVal optname As Long, ByVal optval As Long, optlen As Long) As Long
Declare Function GetTypeByName Lib "ws2_32" Alias "GetTypeByNameA" ()
Declare Function htons Lib "ws2_32" (ByVal hostshort As Integer) As Integer
Declare Function htonl Lib "ws2_32" (ByVal hostlong As Long) As Long
Declare Function inet_addr Lib "ws2_32" (ByVal cp As String) As Long
Declare Function inet_ntoa Lib "ws2_32" (pin As IN_ADDR) As Long
Declare Function ioctlsocket Lib "ws2_32" (ByVal s As Long, ByVal cmd As Long, ByVal argp As Long) As Integer
Declare Function listen Lib "ws2_32" (ByVal s As Long, ByVal backlog As Integer) As Integer
Declare Function ntohl Lib "ws2_32" (ByVal netlong As Long) As Long
Declare Function ntohs Lib "ws2_32" (ByVal netshort As Integer) As Integer
Declare Function recv Lib "ws2_32" (ByVal s As Long, ByVal buf As String, ByVal BufLen As Integer, ByVal flags As Integer) As Integer
Declare Function recvfrom Lib "ws2_32" (ByVal s As Long, ByVal buf As String, ByVal BufLen As Integer, ByVal flags As Integer, from As SOCKADDR, fromlen As Integer) As Integer
Declare Function sockselect Lib "ws2_32" Alias "select" (ByVal nfds As Integer, readfds As FD_SET, writefds As FD_SET, exceptfds As FD_SET, timeout As TIMEVAL) As Integer
Declare Function send Lib "ws2_32" (ByVal s As Long, ByVal buf As Long, ByVal BufLen As Integer, ByVal flags As Integer) As Integer
Declare Function sendto Lib "ws2_32" (ByVal s As Long, ByVal buf As Long, ByVal BufLen As Integer, ByVal flags As Integer, sckto As SOCKADDR, ByVal tolen As Integer) As Integer
Declare Function SetService Lib "ws2_32" Alias "SetServiceA" (ByVal dwNameSpace As Long, ByVal dwOperation As Long, ByVal dwFlags As Long, lpServiceInfo As SERVICE_INFO, ByVal lpServiceAsync
Info As Long, ByVal lpdwStatusFlag
s As Long) As Long
Declare Function setsockopt Lib "ws2_32" (ByVal s As Long, ByVal level As Integer, ByVal optname As Integer, ByVal optval As Long, ByVal optlen As Long) As Integer
Declare Function shutdown Lib "ws2_32" (ByVal s As Long, ByVal how As Integer) As Integer
Declare Function socket Lib "ws2_32" (ByVal iAddressFamily As Long, ByVal iType As Long, ByVal iProtocol As Long) As Long
Declare Function TransmitFile Lib "ws2_32" (ByVal hSocket As Long, ByVal hFile As Long, ByVal nNumberOfBytes
ToWrite As Long, ByVal nNumberOfBytes
PerSend As Long, ByVal lpOverlapped As OVERLAPPED, ByVal lpTransmitBuff
ers As TRANSMIT_FILE_
BUFFERS, ByVal dwFlags As Long) As Boolean
Const MAX_PROTOCOL_C
HAIN = 7
Type WSAPROTOCOLCHA
IN
ChainLen As Integer 'the length of the chain,
'length = 0 means layered protocol,
'length = 1 means base protocol,
'length > 1 means protocol chain
ChainEntries(MAX_PROTOCOL_C
HAIN) As Long 'a list of dwCatalogEntry
Ids
End Type
Const WSAPROTOCOL_LE
N = 255
Type WSAPROTOCOL_IN
FO
dwServiceFlags
1 As Long
dwServiceFlags
2 As Long
dwServiceFlags
3 As Long
dwServiceFlags
4 As Long
dwProviderFlag
s As Long
ProviderId As CLSID
dwCatalogEntry
Id As Long
ProtocolChain As WSAPROTOCOLCHA
IN
iVersion As Integer
iAddressFamily As Integer
iMaxSockAddr As Integer
iMinSockAddr As Integer
iSocketType As Integer
iProtocol As Integer
iProtocolMaxOf
fset As Integer
iNetworkByteOr
der As Integer
iSecuritySchem
e As Integer
dwMessageSize As Integer
dwProviderRese
rved As Integer
szProtocol(WSAPROTOCOL_LE
N + 1) As Byte
End Type
Declare Function WSAAccept Lib "ws2_32" (ByVal hSocket As Long, pSockAddr As SOCKADDR, ByVal AddrLen As Integer, ByVal lpfnCondition As Long, ByVal dwCallbackData As Long) As Long
Declare Function WSAAddressToSt
ring Lib "ws2_32" Alias "WSAAddressToSt
ringA" (lpsaAddress As SOCKADDR, ByVal dwAddressLengt
h As Long, lpProtocolInfo As PROTOCOL_INFO, ByVal lpszAddressStr
ing As String, ByVal lpdwAddressStr
ingLength As Long) As Long
Declare Function WSAAsyncGetHos
tByAddr Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal lpNetAddr As Long, ByVal AddrLen As Long, ByVal AddrType As Long, ByVal lpBuf As Long, ByVal BufLen As Long) As Long
Declare Function WSAAsyncGetHos
tByName Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal lpHostName As String, ByVal lpBuf As Long, ByVal BufLen As Long) As Long
Declare Function WSAAsyncGetPro
toByName Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal lpHostName As String, ByVal lpBuf As Long, ByVal BufLen As Long) As Long
Declare Function WSAAsyncGetPro
toByNumber Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal iNumer As Integer, ByVal lpBuf As Long, ByVal BufLen As Long) As Long
Declare Function WSAAsyncGetSer
vByName Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal lpServiceName As String, ByVal lpProtocolName As String, ByVal lpBuf As Long, ByVal BufLen As Long) As Long
Declare Function WSAAsyncGetSer
vByPort Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal iPort As Integer, ByVal lpProtocolName As String, ByVal lpBuf As Long, ByVal BufLen As Long) As Long
Declare Function WSAAsyncSelect Lib "ws2_32" (ByVal hSocket As Long, ByVal hWnd As Long, ByVal wMsg As Integer, ByVal lEvent As Long) As Integer
Declare Function WSACancelAsync
Request Lib "ws2_32" (ByVal hAsyncTaskHand
le As Long) As Integer
Declare Function WSACleanup Lib "ws2_32" () As Integer
Declare Function WSACloseEvent Lib "ws2_32" (ByVal hEvent As Long) As Boolean
Declare Function WSAConnect Lib "ws2_32" (ByVal hSocket As Long, lpSckName As SOCKADDR, ByVal iSckNameLen As Integer, ByVal lpCallerData As Long, lpCalleeData As Long, lpSQOS As FLOWSPEC, lpGQOS As FLOWSPEC) As Integer
Declare Function WSACreateEvent Lib "ws2_32" () As Long
Declare Function WSADuplicateSo
cket Lib "ws2_32" Alias "WSADuplicateSo
cketA" (ByVal hSocket As Long, ByVal dwProcessId As Long, lpProtocolInfo As WSAPROTOCOL_IN
FO)
Type WSANAMESPACE_I
NFO
NSProviderId As CLSID
dwNameSpace As Long
fActive As Boolean
dwVersion As Long
lpszIdentifier As Long
End Type
Declare Function WSAEnumNameSpa
ceProviders Lib "ws2_32" Alias "WSAEnumNameSpa
ceProvidersA" (lpdwBufferLeng
th As Long, lpnspBuffer As Long) As Integer
Type WSANETWORKEVEN
TS
lNetworkEvents As Long
iErrorCode(FD_MAX_EVENTS) As Integer
End Type
Declare Function WSAEnumNetwork
Events Lib "ws2_32" (ByVal hSocket As Long, ByVal hEventObject As Long, lpNetworkEvent
s As WSANETWORKEVEN
TS)
Declare Function WSAEnumProtoco
ls Lib "ws2_32" Alias "WSAEnumProtoco
lsA" (ByVal lpiProtocols As Long, lpProtocolBuff
er As Long, ByVal lpdwBufferLeng
th As Long) As Integer
Declare Function WSAEventSelect Lib "ws2_32" (ByVal hSocket As Long, ByVal hEventObject As Long, ByVal lNetworkEvents As Long)
Declare Function WSAGetLastErro
r Lib "ws2_32" () As Integer
Type WSAOVERLAPPED
Internal As Long
InternalHigh As Long
Offset As Long
OffsetHigh As Long
hEvent As Long
End Type
Declare Function WSAGetOverlapp
edResult Lib "ws2_32" (ByVal hSocket As Long, lpOverlapped As WSAOVERLAPPED, lpcbTransfer As Long, ByVal fWait As Boolean, ByVal lpdwFlags As Long) As Boolean
Type WSABUF
dwBufferLen As Long
lpBuffer As Long
End Type
Type QUALITYOFSERVI
CE
SendingFlowspe
c As FLOWSPEC
ReceivingFlows
pec As FLOWSPEC
ProviderSpecif
ic As WSABUF
End Type
Declare Function WSAGetQOSByNam
e Lib "ws2_32" (ByVal hSocket As Long, lpQOSName As Long, lpQOS As QUALITYOFSERVI
CE)
Declare Function WSAGetServiceC
lassInfo Lib "ws2_32" Alias "WSAGetServiceC
lassInfoA" (lpProviderId As CLSID, lpServiceClass
Id As CLSID, ByVal lpdwBufferLeng
th As Long, ByVal lpServiceClass
Info As Long) As Integer
Declare Function WSAGetServiceC
lassNameByClas
sId Lib "ws2_32" Alias "WSAGetServiceC
lassNameByClas
sIdA" (lpServiceClass
Id As CLSID, ByVal lpszServiceCla
ssName As String, ByVal lpdwBufferLeng
th As Integer) As Integer
Declare Function WSAHtonl Lib "ws2_32" (ByVal hSocket As Long, ByVal dwHostLong As Long, dwNetLong As Long) As Integer
Declare Function WSAHtons Lib "ws2_32" (ByVal hSocket As Long, ByVal iHostShort As Integer, lpNetShort As Integer) As Integer
Type WSAServiceClas
sInfo
lpServiceClass
Id As CLSID
lpszServiceCla
ssName As String
dwCount As Long
lpClassInfos As Long
End Type
Declare Function WSAInstallServ
iceClass Lib "ws2_32" Alias "WSAInstallServ
iceClassA" (lpServiceClass
Info As WSAServiceClas
sInfo)
Declare Function WSAIoctl Lib "ws2_32" (ByVal hSocket As Long, ByVal dwIoControlCod
e As Long, ByVal lpvInBuffer As Long, ByVal cbInBuffer As Long, ByVal lpvOUTBuffer As Long, ByVal bOUTBuffer As Long, lpcbBytesRetur
ned As Long, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionRO
UTINE As Long)
Declare Function WSAJoinLeaf Lib "ws2_32" (ByVal hSocket As Long, lpSckName As SOCKADDR, ByVal iSckNameLen As Integer, lpCallerData As WSABUF, lpCalleeData As WSABUF, lpSQOS As FLOWSPEC, lpGQOS As FLOWSPEC, ByVal dwFlags As Long) As Long
Enum WSAEcomparator
COMP_EQUAL = 0
COMP_NOTLESS = 1
End Enum
Type WSAVersion
dwVersion As Long
ecHow As WSAEcomparator
End Type
Type AFPROTOCOLS
iAddressFamily As Integer
iProtocol As Integer
End Type
Type SOCKET_ADDRESS
lpSockaddr As Long
iSockaddrLengt
h As Long
End Type
Type WSAQuerySet
dwSize As Long
lpszServiceIns
tanceName As String
lpServiceClass
Id As CLSID
lpVersion As WSAVersion
lpszComment As String
dwNameSpace As Long
lpNSProviderId As CLSID
lpszContext As String
dwNumberOfProt
ocols As Long
lpafpProtocols As Long
lpszQueryStrin
g As String
dwNumberOfCsAd
drs As Long
lpcsaBuffer As CSADDR_INFO
dwOutputFlags As Long
lpBlob As BLOB
End Type
Declare Function WSALookupServi
ceBegin Lib "ws2_32" Alias "WSALookupServi
ceBeginA" (ByVal lpqsRestrictio
ns As WSAQuerySet, ByVal dwControlFlags As SearchControlF
lags, lphLookup As Long) As Integer
Declare Function WSALookupServi
ceEnd Lib "ws2_32" (ByVal hLookup As Long) As Integer
Declare Function WSALookupServi
ceNext Lib "ws2_32" Alias "WSALookupServi
ceNextA" (ByVal hLookup As Long, ByVal dwControlFlags As SearchControlF
lags, lpdwBufferLeng
th As Long, lpqsResults As WSAQuerySet) As Integer
Declare Function WSANtohl Lib "ws2_32" (ByVal hSocket As Long, ByVal lpNetLong As Long, lpHostLong As Long) As Integer
Declare Function WSANtohs Lib "ws2_32" (ByVal hSocket As Long, ByVal lpNetShort As Integer, lpHostShort As Integer) As Integer
Declare Function WSAProviderCon
figChange Lib "ws2_32" (ByVal lpNotification
Handle As Long, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionRO
UTINE As Long) As Integer
Declare Function WSARecvEx Lib "ws2_32" (ByVal hSocket As Long, ByVal lpBuffers As Long, ByVal dwBufferCount As Long, lpNumberOfByte
sRecvd As Long, lpFlags As Long, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionRO
UTINE As Long) As Integer
Declare Function WSARecvDisconn
ect Lib "ws2_32" (ByVal hSocket As Long, lpInboundDisco
nnectData As WSABUF) As Integer
Declare Function WSARecvFrom Lib "ws2_32" (ByVal hSocket As Long, ByVal lpBuffers As Long, ByVal dwBufferCount As Long, lpNumberOfByte
sRecvd As Long, lpFlags As Long, lpFrom As SOCKADDR, lpFromlen As Integer, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionRO
UTINE As Long) As Integer
Declare Function WSARemoveServi
ceClass Lib "ws2_32" (lpServiceClass
Id As CLSID) As Integer
Declare Function WSAResetEvent Lib "ws2_32" (ByVal hEvent As Long) As Boolean
Declare Function WSASend Lib "ws2_32" (ByVal hSocket As Long, ByVal lpBuffers As Long, ByVal dwBufferCount As Long, lpNumberOfByte
sSent As Long, ByVal dwFlags As Long, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionRO
UTINE As Long) As Integer
Declare Function WSASendDisconn
ect Lib "ws2_32" (ByVal hSocket As Long, boundDisconnec
tData As WSABUF) As Integer
Declare Function WSASendTo Lib "ws2_32" (ByVal hSocket As Long, ByVal lpBuffers As Long, ByVal dwBufferCount As Long, lpNumberOfByte
sSent As Long, ByVal dwFlags As Long, lpTo As SOCKADDR, ByVal iToLen As Integer, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionRO
UTINE As Long) As Integer
Declare Function WSASetEvent Lib "ws2_32" (ByVal hEvent As Long) As Boolean
Declare Sub WSASetLastErro
r Lib "ws2_32" (ByVal iError As Integer)
Enum WSAESETSERVICE
OP
RNRSERVICE_REG
ISTER = 0
RNRSERVICE_DER
EGISTER = 1
RNRSERVICE_DEL
ETE = 2
End Enum
Declare Function WSASetService Lib "ws2_32" Alias "WSASetServiceA" (lpqsRegInfo As WSAQuerySet, essOperation As WSAESETSERVICE
OP, ByVal dwControlFlags As Long) As Integer
Declare Function WSASocket Lib "ws2_32" Alias "WSASocketA" (ByVal iAddressFamily As Integer, ByVal iType As Integer, ByVal iProtocol As Integer, lpProtocolInfo As WSAPROTOCOL_IN
FO, ByVal lpGroup As Long, ByVal dwFlags As Long) As Long
Declare Function WSAStartup Lib "ws2_32" (ByVal wVersionRequir
ed As Long, lpWSAData As WSADATA) As Long
Declare Function WSAStringToAdd
ress Lib "ws2_32" (ByVal AddressString As String, ByVal AddressFamily As Integer, lpProtocolInfo As WSAPROTOCOL_IN
FO, lpAddress As SOCKADDR, lpAddressLengt
h As Integer) As Integer
Public SockLastError As Long
Function sckhibyte(ByVal wParam As Integer)
sckhibyte = (wParam \ &H100) And &HFF&
End Function
Function scklobyte(ByVal wParam As Integer)
scklobyte = wParam And &HFF&
End Function
Property Get LocalHostName() As String
Dim sStr As String * 256, lStr&
Dim r&
r = gethostname(sStr, 256)
SockLastError = WSAGetLastErro
r()
LocalHostName = Trim(Replace(sStr, vbNullChar, vbNullString))
End Property
Property Get LocalHostIP() As String
Dim sHostName$, pHostent&
Dim pHost As HOSTENT
Dim hIPAddress&, sIPAddress$
Dim abIPAddress() As Byte
Dim i%
sHostName = LocalHostName
pHostent = gethostbyname(sHostName)
SockLastError = WSAGetLastErro
r()
If pHostent = 0 Then Exit Property
CopyMemory ByVal pHost, ByVal pHostent, ByVal LenB(pHost)
CopyMemory hIPAddress, ByVal pHost.h_addr_l
ist, ByVal 4&
ReDim abIPAddress(1 To pHost.h_length)
CopyMemory abIPAddress(1), ByVal hIPAddress, ByVal pHost.h_length
For i = 1 To pHost.h_length
sIPAddress = sIPAddress & abIPAddress(i) & "."
Next
LocalHostIP = Left$(sIPAddress, Len(sIPAddress) - 1)
End Property
Sub SocketsInitial
ize()
Dim WSAD As WSADATA
Dim iReturn As Integer
Dim sLowByte As String, sHighByte As String, sMsg As String
iReturn = WSAStartup(WS_VERSION_REQ
D, WSAD)
SockLastError = WSAGetLastErro
r()
If iReturn <> 0 Then
Exit Sub
End If
If LoByte(WSAD.wversion) < WS_VERSION_MAJ
OR Or _
(LoByte(WSAD.wversion) = WS_VERSION_MAJ
OR And _
HiByte(WSAD.wversion) < WS_VERSION_MIN
OR) Then
Exit Sub
End If
If WSAD.iMaxSocke
ts < MIN_SOCKETS_RE
QD Then
Exit Sub
End If
End Sub
Function SocketsCleanup() As Long
SocketsCleanup = WSACleanup()
End Function
Function CreateSocket(ByVal SockType As SockTypes, Optional ByVal Protocol As SockProtocols = IPPROTO_TCP) As Long
CreateSocket = socket(AF_NETBIOS, SockType, Protocol)
SockLastError = WSAGetLastErro
r
End Function
Function DestroySocket(hSocket As Long) As Boolean
DestroySocket = (closesocket(hSocket) = 0)
SockLastError = WSAGetLastErro
r
End Function
Function GetSckName(hSocket As Long) As String
Dim sName$
Dim pSckAdd As SOCKADDR, lpAdd&
Dim r&
r = GetSockNameA(hSocket, lpAdd, LenB(pSckAdd))
SockLastError = WSAGetLastErro
r
CopyMemory ByVal pSckAdd, ByVal lpAdd, ByVal LenB(pSckAdd)
GetSckName = Trim(Replace(pSckAdd.sa_dat
a, vbNullChar, vbNullString))
End Function