'Author: Gerard    05-27-03 04:38

' an example how to bind a port to an IP:

$OPTIMIZE ON
$APPTYPE GUI
$TYPECHECK ON
     
CONST AF_INET = 2
CONST SOCK_STREAM = 1
CONST IPPROTO_TCP = 6
CONST INADDR_LOCALHOST = &H7F000001 '127.0.0.1     

DECLARE FUNCTION BindAddr LIB "wsock32.dll" ALIAS "bind" (hsocket AS LONG, sockaddr AS LONG, _
                 saSize AS LONG) AS LONG
DECLARE FUNCTION htonl LIB "wsock32.dll" ALIAS "htonl" (hbo AS LONG) AS LONG
DECLARE FUNCTION htons LIB "wsock32.dll" ALIAS "htons" (hbo AS WORD) AS WORD
DECLARE FUNCTION inet_addr LIB "wsock32.dll" ALIAS "inet_addr" (dottedAdr AS STRING) AS LONG
DECLARE FUNCTION listen LIB "wsock32.dll" ALIAS "listen" (hsocket AS LONG, backlog AS LONG) AS LONG
DECLARE FUNCTION socket LIB "wsock32.dll" ALIAS "socket" (af AS LONG, stype AS LONG, protocol _
                 AS LONG) AS LONG

TYPE InetBindStruc
     SinFam AS SHORT
     SinPrt AS SHORT
     SinAddr AS LONG
     SinZero1 AS LONG
     SinZero2 AS LONG
END TYPE

DIM Sock AS INTEGER
DIM InetBindStr AS InetBindStruc
DIM Mem As QMEMORYSTREAM
DIM Rtn AS INTEGER

Sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
' 16 bytes structure
InetBindStr.SinFam = AF_INET 'SIN_FAM
InetBindStr.SinPrt = htons(12345) 'SIN_PORT  Oops, port 12345 ?
InetBindStr.SinAddr = htonl(INADDR_LOCALHOST) 'SIN_ADDRESS
Mem.writeUDT(InetBindStr) 
Rtn = BindAddr(Sock, mem.pointer, 16) 'Bind port to IP
Rtn = listen(Sock,1) 'Max_pending is 1
'No error checks done!


CREATE Dummy AS QFORM
    Caption = "Socket Bind Test"
    Width = 250
    Height = 150
    Center
    CREATE LABEL AS QLABEL
        Width = 150
        Top = 40
        Left = 5
        Caption = "This Example binds port: 12345 to IP: 127.0.0.1"
    END CREATE
END CREATE

Dummy.Showmodal