Mercurial > prosody-hg
comparison net/server_event.lua @ 5965:99d55f12a26f
net.server_{select,event}: addclient: Add argument for overriding socket type
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 23 Dec 2013 17:55:41 +0100 |
| parents | 3bd90108cc3c |
| children | 958ad646c0f2 |
comparison
equal
deleted
inserted
replaced
| 5964:ad04170d6533 | 5965:99d55f12a26f |
|---|---|
| 734 interface:_start_connection(sslctx) | 734 interface:_start_connection(sslctx) |
| 735 return interface, client | 735 return interface, client |
| 736 --function handleclient( client, ip, port, server, pattern, listener, _, sslctx ) -- creates an client interface | 736 --function handleclient( client, ip, port, server, pattern, listener, _, sslctx ) -- creates an client interface |
| 737 end | 737 end |
| 738 | 738 |
| 739 function addclient( addr, serverport, listener, pattern, sslctx ) | 739 function addclient( addr, serverport, listener, pattern, sslctx, typ ) |
| 740 if sslctx and not has_luasec then | 740 if sslctx and not has_luasec then |
| 741 debug "need luasec, but not available" | 741 debug "need luasec, but not available" |
| 742 return nil, "luasec not found" | 742 return nil, "luasec not found" |
| 743 end | 743 end |
| 744 local client, err = socket.tcp() -- creating new socket | 744 if not typ then |
| 745 typ = "tcp" | |
| 746 end | |
| 747 local create = socket[typ] | |
| 748 if type( create ) ~= "function" then | |
| 749 return nil, "invalid socket type" | |
| 750 end | |
| 751 local client, err = create() -- creating new socket | |
| 745 if not client then | 752 if not client then |
| 746 debug( "cannot create socket:", err ) | 753 debug( "cannot create socket:", err ) |
| 747 return nil, err | 754 return nil, err |
| 748 end | 755 end |
| 749 client:settimeout( 0 ) -- set nonblocking | 756 client:settimeout( 0 ) -- set nonblocking |
| 750 local res, err = client:connect( addr, serverport ) -- connect | 757 local res, err = client:connect( addr, serverport ) -- connect |
| 751 if res or ( err == "timeout" ) then | 758 if res or ( err == "timeout" ) then |
| 752 local ip, port = client:getsockname( ) | 759 if client.getsockname then |
| 753 local interface = wrapclient( client, ip, serverport, listener, pattern, sslctx ) | 760 addr = client:getsockname( ) |
| 761 end | |
| 762 local interface = wrapclient( client, addr, serverport, listener, pattern, sslctx ) | |
| 754 debug( "new connection id:", interface.id ) | 763 debug( "new connection id:", interface.id ) |
| 755 return interface, err | 764 return interface, err |
| 756 else | 765 else |
| 757 debug( "new connection failed:", err ) | 766 debug( "new connection failed:", err ) |
| 758 return nil, err | 767 return nil, err |
