net/server_event.lua
changeset 6819 36367fb1ecf9
parent 6785 ec172dbe9d14
child 6820 07f43c7aa059
equal deleted inserted replaced
6818:46546d57f639 6819:36367fb1ecf9
   748 		interface:_start_connection(sslctx)
   748 		interface:_start_connection(sslctx)
   749 		return interface, client
   749 		return interface, client
   750 		--function handleclient( client, ip, port, server, pattern, listener, _, sslctx )  -- creates an client interface
   750 		--function handleclient( client, ip, port, server, pattern, listener, _, sslctx )  -- creates an client interface
   751 	end
   751 	end
   752 
   752 
   753 	function addclient( addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )
   753 	function addclient( addr, serverport, listener, pattern, sslctx )
       
   754 		if sslctx and not ssl then
       
   755 			debug "need luasec, but not available"
       
   756 			return nil, "luasec not found"
       
   757 		end
   754 		local client, err = socket.tcp()  -- creating new socket
   758 		local client, err = socket.tcp()  -- creating new socket
   755 		if not client then
   759 		if not client then
   756 			debug( "cannot create socket:", err )
   760 			debug( "cannot create socket:", err )
   757 			return nil, err
   761 			return nil, err
   758 		end
   762 		end
   759 		client:settimeout( 0 )  -- set nonblocking
   763 		client:settimeout( 0 )  -- set nonblocking
   760 		if localaddr then
       
   761 			local res, err = client:bind( localaddr, localport, -1 )
       
   762 			if not res then
       
   763 				debug( "cannot bind client:", err )
       
   764 				return nil, err
       
   765 			end
       
   766 		end
       
   767 		local sslctx
       
   768 		if sslcfg then  -- handle ssl/new context
       
   769 			if not has_luasec then
       
   770 				debug "need luasec, but not available"
       
   771 				return nil, "luasec not found"
       
   772 			end
       
   773 			sslctx, err = sslcfg
       
   774 			if err then
       
   775 				debug( "cannot create new ssl context:", err )
       
   776 				return nil, err
       
   777 			end
       
   778 		end
       
   779 		local res, err = client:connect( addr, serverport )  -- connect
   764 		local res, err = client:connect( addr, serverport )  -- connect
   780 		if res or ( err == "timeout" ) then
   765 		if res or ( err == "timeout" ) then
   781 			local ip, port = client:getsockname( )
   766 			local ip, port = client:getsockname( )
   782 			local interface = wrapclient( client, ip, serverport, listener, pattern, sslctx, startssl )
   767 			local interface = wrapclient( client, ip, serverport, listener, pattern, sslctx )
   783 			interface:_start_connection( startssl )
   768 			interface:_start_connection( startssl )
   784 			debug( "new connection id:", interface.id )
   769 			debug( "new connection id:", interface.id )
   785 			return interface, err
   770 			return interface, err
   786 		else
   771 		else
   787 			debug( "new connection failed:", err )
   772 			debug( "new connection failed:", err )