Code: Alles auswählen
EnableExplicit
InitNetwork()
Procedure OpenNetworkConnectionEx(ServerName.s,Port.l,TimeOut.l,Type.l = #PB_Network_TCP)
Protected WSAD.WSADATA, TV.TIMEVAL, Addr.SOCKADDR_IN, *HostInfo.HOSTENT, Write_FD.FD_SET
Protected S.l, Switch.l, Retval.l, ServerIP.s
TV\tv_sec = TimeOut
Switch = #True
If Type = #PB_Network_UDP
ProcedureReturn OpenNetworkConnection(ServerName,Port,#PB_Network_UDP)
EndIf
If WSAStartup_($202,@WSAD)
ProcedureReturn #False
EndIf
*HostInfo = gethostbyname_(@ServerName)
If *HostInfo
ServerIP = StrU(PeekB(PeekL(*HostInfo\h_addr_list)),0) + "."
ServerIP + StrU(PeekB(PeekL(*HostInfo\h_addr_list) + 1),0) + "."
ServerIP + StrU(PeekB(PeekL(*HostInfo\h_addr_list) + 2),0) + "."
ServerIP + StrU(PeekB(PeekL(*HostInfo\h_addr_list) + 3),0)
EndIf
S = SOCKET_(#AF_INET,#SOCK_STREAM,#IPPROTO_TCP)
If S = #SOCKET_ERROR
WSACleanup_()
ProcedureReturn #False
EndIf
ioctlsocket_(S,#FIONBIO,@Switch)
With Addr
\sin_addr = inet_addr_(ServerIP)
\sin_port = htons_(Port)
\sin_family = #AF_INET
EndWith
connect_(S,@Addr,SizeOf(Addr))
With Write_FD
\fd_count = 1
\fd_array[0] = S
EndWith
Repeat
Retval = select_(0,0,@Write_FD,0,@TV)
Until Retval >= 0
closesocket_(S)
WSACleanup_()
If Retval
ProcedureReturn OpenNetworkConnection(ServerName,Port)
EndIf
EndProcedure
#TimeOut = 1 ; in Sekunden
Define ID.l = OpenNetworkConnectionEx("www.purebasic.com",80,#TimeOut)
If ID
Debug "Verbindung war erfolgreich"
CloseNetworkConnection(ID)
Else
Debug "Timeout oder Fehler"
EndIf