That seems to be exactly what I'm searching for.

I've compiled the applied patch into a windows-binary, however since I 
don't know how the functions in lib/net.js are called, can you tell whether 
or not I will need to give connect() additional params? I'm currently only 
calling it with port after all.


Am Mittwoch, 20. Juni 2012 20:21:14 UTC+2 schrieb Ben Kelly:
>
> So every TCP socket involves two ports; the client port and the server 
> port.  When you say "send Data over a specific port", that sounds like you 
> want to specify the client source port to use in the connection.  For 
> example, connect to port 80 on the server and originate packets from my 
> port 12345.  Is that correct? 
>
> With the BSD socket API you would use the bind(2) call to achieve this 
> which is why its called "binding" the socket to a particular source port or 
> source address. 
>
> Unfortunately, it does not appear that node provides an interface to do 
> this with TCP connections.  The docs don't seem to mention anything about 
> binding to a specific local address or port.  The code in lib/net.js, 
> however, does have an additional localAddress parameter on the connect() 
> function that is not in the documentation.  This is passed to the Bind() 
> method in the tcp_wrap.cc C++ code. 
>
> So it looks like there should at least be a documentation update to note 
> the localAddress parameter on connect().  In order to support binding to a 
> particular local port a new parameter would need to be added to the 
> net.socket.connect() function. 
>
> If you're feeling adventurous you could try this completely untested patch 
> to node/lib/net.js: 
>
> --- a/lib/net.js 
> +++ b/lib/net.js 
> @@ -618,7 +618,7 @@ function afterWrite(status, handle, req) { 
>  } 
>   
>   
> -function connect(self, address, port, addressType, localAddress) { 
> +function connect(self, address, port, addressType, localAddress, 
> localPort) { 
>    if (port) { 
>      self.remotePort = port; 
>    } 
> @@ -632,9 +632,9 @@ function connect(self, address, port, addressType, 
> localAddress) { 
>    if (localAddress) { 
>      var r; 
>      if (addressType == 6) { 
> -      r = self._handle.bind6(localAddress); 
> +      r = self._handle.bind6(localAddress, localPort); 
>      } else { 
> -      r = self._handle.bind(localAddress); 
> +      r = self._handle.bind(localAddress, localPort); 
>      } 
>   
>      if (r) { 
>
>
> Hope that helps. 
>
> Ben 
>
> On Jun 20, 2012, at 1:46 PM, Fabian Korak wrote: 
>
> > My TCP is a little rusty (and not really from protocol terminology, but 
> rather from Posix/C), but I don't think I need to bind() in order to send, 
> but rather connect()? I actually just want to be able to force Node to send 
> Data over a specific port of my choice, instead of just connection to a 
> port of my choice and then sending the data using something from the 
> 5XXXX-port-range. 
> > 
> > For a problem not related to my algorithm, but having the same root: If 
> node always sends TCP-data over 5XXXX but my firewall is set to block any 
> communication or another application uses that port range? Then there would 
> just be no way to manually change it? 
> > 
> > 
> > Am Mittwoch, 20. Juni 2012 19:21:50 UTC+2 schrieb Ben Kelly: 
> > Are you saying you want to bind the source port of the TCP socket? 
> > 
> > At first glance it does appear that node is lacking an interface to bind 
> a socket to a specific source port or source address. 
> > 
> > On Jun 20, 2012, at 12:46 PM, Fabian Korak wrote: 
> > 
> > > Agreed, but for the Echo-algorithm, which identifies nodes using 
> specific routes (in my example ports) I need to explicitly set the port in 
> order to fulfil the requirements set for the project. 
> > > 
> > > In the algorithm the code ends up looking like this: 
> > > var nodes = []; 
> > > nodes = {//some ports} 
> > > 
> > > client.on('data',function(data) 
> > >     { 
> > >     for(var i = 0; i < nodes.length; i++) 
> > >             { 
> > >                     var sendNode = net.connect(nodes[i],function(){ 
> > >                         client.write('info'); 
> > >                     }) 
> > >                 
> > >             } 
> > > 
> > > Am Mittwoch, 20. Juni 2012 18:39:24 UTC+2 schrieb Nathan Rajlich: 
> > > Your server doesn't need to call net.connect() to connect back to the 
> client. You already have the connection with the "client" object, so you 
> can just call client.write() directly in the "data" event callback 
> function. 
> > > 
> > > On Wed, Jun 20, 2012 at 8:45 AM, Ben Noordhuis  wrote: 
> > > On Wed, Jun 20, 2012 at 5:27 PM, Fabian Korak  wrote: 
> > > > Hello, sorry for the double-post, google-mail interface decided to 
> post 
> > > > before I was finished... 
> > > > 
> > > > I'm currently working on an implementation of the echo-algorithm in 
> > > > Node.js. I currently have code like this(a lot snipped obviously): 
> > > > * 
> > > > Initial Node: 
> > > > *var own_port = 33333; 
> > > > var start_port = 22222; 
> > > > var sendNode = net.connect(start_port,function(){ 
> > > >             sendNode.write('info'); 
> > > >         })* 
> > > > *//and typical listening code for listening on own_port 
> > > > *Recieving Node:* 
> > > > var own_port = 22222; 
> > > > var back_port; 
> > > > 
> > > > var nodeServer = net.createServer(); 
> > > > nodeServer.on('connection', function(client) 
> > > >     { 
> > > >     client.on('data',function(data) 
> > > >     { 
> > > >     back_port = client.remotePort; 
> > > >     var sendNode = net.connect(back_port,function(){ 
> > > >                         client.write('info'); 
> > > >                     }) 
> > > > 
> > > > } 
> > > > 
> > > > nodeServer.listen(own_port); 
> > > > As some of you now may have noticed is that node does not send on 
> the same 
> > > > port it listens. Is there any way to specify over which port 
> > > > 'client.write()' sends, and if not, any alternatives or plans to add 
> that? 
> > > 
> > > No and no. No offense but your question doesn't make sense in the 
> > > context of the TCP protocol. TCP is always connection-oriented. 
> > > 
> > > 
> > > 
> > > 
> > > -- 
> > > Job Board: http://jobs.nodejs.org/ 
> > > Posting guidelines: 
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines 
> > > You received this message because you are subscribed to the Google 
> > > Groups "nodejs" group. 
> > > To post to this group, send email to [email protected] 
> > > To unsubscribe from this group, send email to 
> > > [email protected] 
> > > For more options, visit this group at 
> > > http://groups.google.com/group/nodejs?hl=en?hl=en 
> > 
> > 
> > -- 
> > Job Board: http://jobs.nodejs.org/ 
> > Posting guidelines: 
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines 
> > You received this message because you are subscribed to the Google 
> > Groups "nodejs" group. 
> > To post to this group, send email to [email protected] 
> > To unsubscribe from this group, send email to 
> > [email protected] 
> > For more options, visit this group at 
> > http://groups.google.com/group/nodejs?hl=en?hl=en 
>
>

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to