Hi Fabian, Sorry, but after looking at it closer my patch was inadequate. It will require additional plumbing to get the parameters from the public API down to the C++ Bind() method. Unfortunately I don't have time to track it down right now, but I can try to come up with a pull request next week.
- Ben On Jun 20, 2012, at 4:04 PM, Fabian Korak wrote: > 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 nodejs@googlegroups.com > > > To unsubscribe from this group, send email to > > > nodejs+unsubscr...@googlegroups.com > > > 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 nodejs@googlegroups.com > > To unsubscribe from this group, send email to > > nodejs+unsubscr...@googlegroups.com > > 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 nodejs@googlegroups.com > To unsubscribe from this group, send email to > nodejs+unsubscr...@googlegroups.com > 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 nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en