I stumbled across this piece of C code that I'd like to convert to PB.
Code: Select all
#define FD_CLR(fd, set) do { \
u_int __i; \
for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { \
if (((fd_set FAR *)(set))->fd_array[__i] == fd) { \
while (__i < ((fd_set FAR *)(set))->fd_count-1) { \
((fd_set FAR *)(set))->fd_array[__i] = \
((fd_set FAR *)(set))->fd_array[__i+1]; \
__i++; \
} \
((fd_set FAR *)(set))->fd_count--; \
break; \
} \
} \
} while(0)
#define FD_SET(fd, set) do { \
u_int __i; \
for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
if (((fd_set FAR *)(set))->fd_array[__i] == (fd)) { \
break; \
} \
} \
if (__i == ((fd_set FAR *)(set))->fd_count) { \
if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { \
((fd_set FAR *)(set))->fd_array[__i] = (fd); \
((fd_set FAR *)(set))->fd_count++; \
} \
} \
} while(0)
#define FD_ZERO(set) (((fd_set FAR *)(set))->fd_count=0)
#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set FAR *)(set))
Code: Select all
Macro FD_ZERO(SET)
SET\fd_count = #Null
EndMacro
Procedure.l WinSock()
While #True
If WSAStartup_($101,@Wsa.WSADATA) = #Null
Sock.l = SOCKET_(#AF_INET,#SOCK_STREAM,#IPPROTO_TCP)
If Sock <> #SOCKET_ERROR
Repeat
Addr_Sock.SOCKADDR_IN
ZeroMemory_(@Addr_Sock,SizeOf(SOCKADDR_IN))
Addr_Sock\sin_family = #AF_INET
Addr_Sock\sin_port = htons_(5310)
Addr_Sock\sin_addr = inet_addr_("127.0.0.1")
Sleep_(10)
Until connect_(Sock,@Addr_Sock,SizeOf(SOCKADDR_IN)) <> #SOCKET_ERROR
If send_(Sock,@"Test",4,#False) = 4
i.l = #Null
Repeat
i = i + 1
FdRead.FD_SET
FD_ZERO(FdRead)
FD_SET(Sock,FdRead)
Debug select_(Sock,@FdRead,#Null,#Null,#Null)
Sleep_(10)
Until i => 17000
closesocket_(Sock)
WSACleanup_()
Else
closesocket_(Sock)
WSACleanup_()
EndIf
Else
WSACleanup_()
EndIf
EndIf
Sleep_(1000)
Wend
EndProcedure