ocket:TSocket; begin result:=Winsock.Socket(PF_INET,SOCK_STREAM,IPPROTO_IP); end; (*@\\\*) (*@/// procedure t_tcpip.bind_socket(var socket:TSocket; out_port_min,out_port_max: word); *) procedure t_tcpip.bind_socket(var socket:TSocket; out_port_min,out_port_max: word); var LocalAddress : TSockAddr; i: word; begin with LocalAddress do begin Sin_Family:=PF_INET; Sin_addr.S_addr:=INADDR_ANY; end; i:=out_port_min; while i<=out_port_max do begin LocalAddress.Sin_Port:=Winsock.htons(i); if Winsock.bind(socket,LocalAddress, SizeOf(LocalAddress))<>SOCKET_ERROR then BREAK; inc(i); end; end; (*@\\\0000000401*) (*@/// procedure t_tcpip.connect_socket(var socket:TSocket; Socket_number:smallint;ip_address:longint); *) procedure t_tcpip.connect_socket(var socket:TSocket; Socket_number:smallint;ip_address:longint); var RemoteAddress : TSockAddr; begin with RemoteAddress do begin Sin_Family:=PF_INET; Sin_Port:=Winsock.htons(Socket_number); Sin_addr:=TInAddr(ip_address); end; if Winsock.Connect(Socket,RemoteAddress, SizeOf(RemoteAddress))=SOCKET_ERROR then begin if winsock.WSAGetLastError<>wsaewouldblock then begin Close_Socket(socket); if assigned(f_tracer) then f_tracer(''''Failed to open output socket ''''+inttostr(Socket_number)+'''' to host ''''+ ip2string(ip_address),tt_socket); end end else if assigned(f_tracer) then f_tracer(''''Opened output socket ''''+inttostr(Socket_number)+'''' to host ''''+ ip2string(ip_address)+'''' successfully; ID ''''+inttostr(socket), tt_socket); end; (*@\\\000E00101C00101C00101C00101C*) (*@/// procedure t_tcpip.open_socket_out(var socket:TSocket; Socket_number:smallint;ip_address:longint); *) procedure t_tcpip.open_socket_out(var socket:TSocket; Socket_number:smallint;ip_address:longint); begin close_socket(socket); socket:=Create_Socket; connect_socket(socket,Socket_number,ip_address); end; (*@\\\0000000501*) (*@/// procedure t_tcpip.open_socket_in(var socket:TSocket; Socket_number:smallint;ip_address:longint); *) procedure t_tcpip.open_socket_in(var socket:TSocket; Socket_number:smallint;ip_address:longint); var LocalAddress : TSockAddr; begin close_socket(socket); f_Socket:=Create_Socket; (*@/// open the socket and let it listen *) with LocalAddress do begin Sin_Family:=PF_INET; Sin_Port:=Winsock.htons(Socket_number); Sin_addr:=TInAddr(ip_address); end; if Winsock.bind(socket,LocalAddress, SizeOf(LocalAddress))=SOCKET_ERROR then begin if assigned(f_tracer) then f_tracer(''''Failed to bind socket ''''+inttostr(Socket_number)+'''' for local ip ''''+ ip2string(ip_address),tt_socket); Close_Socket(socket); EXIT; end else if assigned(f_tracer) then f_tracer(''''Bound to socket ''''+inttostr(Socket_number)+'''' for local ip ''''+ ip2string(ip_address),tt_socket); if Winsock.Listen(Socket,back_log)=SOCKET_ERROR then begin Close_Socket(socket); if assigned(f_tracer) then f_tracer(''''Failed to set input socket ''''+inttostr(Socket_number)+ '''' to listening mode'''',tt_socket); end else if assigned(f_tracer) then f_tracer(''''Set input socket ''''+inttostr(Socket_number)+ '''' to listening mode sucessfully; ID ''''+inttostr(socket),tt_socket); (*@\\\0030000A18000A18001123*) end; (*@\\\0000000701*) (*@/// function t_tcpip.accept_socket_in(socket:TSocket; var SockInfo:TSockAddr):TSocket; *) function t_tcpip.accept_socket_in(socket:TSocket; var SockInfo:TSockAddr):TSocket; var x: u_int; LocalAddress : TSockAddr; temp_socket: TSocket; begin x:=SizeOf(LocalAddress); (*$ifndef ver100 *) temp_socket:=Winsock.Accept(Socket,LocalAddress,x); (*$else *) { Delphi 3 ARGH! } temp_socket:=Winsock.Accept(Socket,@LocalAddress,@x); (*$endif *) if temp_socket=SOCKET_ERROR then begin (* no incoming call available *) temp_socket:=INVALID_SOCKET; if assigned(f_tracer) then f_tracer(''''No incoming connection found on socket ID ''''+inttostr(Socket), tt_socket); end else if assigned(f_tracer) then f_tracer(''''Incoming connection found on socket ID ''''+inttostr(Socket)+ ''''; generated socket ID ''''+inttostr(temp_socket),tt_socket); accept_socket_in:=temp_socket; sockinfo:=LocalAddress; end; (*@\\\0000001748*) (*@/// function t_tcpip.socket_state(socket:TSocket):T_Socket_State; *) function t_tcpip.socket_state(socket:TSocket):T_Socket_State; var peer_adr: TSockAddr; x: u_int; begin if socket=INVALID_SOCKET then socket_state:=invalid else begin x:=sizeof(TSockAddr); if winsock.getpeername(socket,peer_adr,x)=0 then socket_state:=connected else begin if winsock.WSAGetLastError<>WSAENOTCONN then socket_state:=state_unknown else socket_state:=valid end; end; end;