If the application you're working with requires that you close the socket, then 
it seems like you should be creating, connecting, sending on, and closing a new 
socket every ten seconds in response to your flow stats coming in.

It looks like you may be not creating and connecting a new socket after the 
first run, and are trying to reuse a socket that you'd closed (made possible by 
the fact that you're saving a reference to an old one as self.sock, which you 
can never actually reuse since you close it).

I put the following code in an app (and then kick it off by calling it in my 
Component's install()), and it seems to work just fine:

def handle_timer (self):
  import socket
  self.post_callback(5, self.handle_timer)
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  sock.connect(("",5000))
  sock.send("Hello world!\n")
  sock.close()

Can you test if this seems to work for you?  (I just run "nc -lk 5000" to give 
it something to connect to.)

As a sidenote: These calls are blocking, and it's not nice to block the thread. 
 Using Twisted is the preferred solution.  But since this is only periodic and 
is connecting to localhost, etc., I am not sure that's worth worrying about.  
As I said, it has been a long time since I have looked at NOX's threading 
stuff, but nothing immediately comes to mind about why this wouldn't work.

-- Murphy

On Aug 15, 2011, at 2:15 PM, chris oleke wrote:

> Murphy, the thing is I'd pretty much want to maintain the sockets that I'm 
> using at the moment since the third party application is tailored to work 
> with them. When I send the data from NOX, I have to close the sockets because 
> the data won't be received on the other end if the sockets remain open. My 
> flow stats are generated every 10 seconds so my aim is to have them sent 
> continously. I had previously tried using sock.setblocking(0) but encountered 
> an error "operation already in progress" so abandoned using it.
> 
> On Sat, Aug 13, 2011 at 2:34 AM, Murphy McCauley <jam...@nau.edu> wrote:
> It has been long enough since I've looked at the co-op threading in NOX that 
> I don't immediately know what the problem you're having with the file 
> descriptors going away is.  You're sure you're not calling close() on them?  
> You could try setting the socket to non-blocking mode with 
> sock.setblocking(0).
> 
> It might be possible to get asynccore to work, but I think it'd probably be 
> some trouble.  Twisted, on the other hand, should more or less just work.  I 
> think you can probably look at the NOX webservice stuff for a bit of an 
> example, but it shouldn't be much different than any other Twisted code.
> 
> Or if you would be okay with communicating with the other process via JSON 
> strings, you could use jsonmessenger.  Look in monitoring.py from the 
> monitoring component for an example.
> 
> Hope that helps.
> 
> -- Murphy
> 
> On Aug 12, 2011, at 2:03 PM, chris oleke wrote:
> 
>> Hi
>> 
>> 
>> 
>> Hopefully this is still within the Nox domain. I have a python application 
>> that is using sockets to send out flows that I have obtained from a 
>> flow_stats_in_event to an application external of Nox. This is how I’m doing 
>> it
>> 
>> self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>> self.sock.connect(("",5000))
>> self.sock.send(repr(flows))
>> self.sock.close()
>> 
>> Unfortunately I can only send the flows once before the sockets close after 
>> which I get the errors below
>> 
>> self.sock.send(repr(flows))
>>   File "/usr/lib/python2.6/socket.py", line 167, in _dummy
>>     raise error(EBADF, 'Bad file descriptor')
>> error: [Errno 9] Bad file descriptor
>>  
>> It’s obviously as a result of trying to send information out on a socket 
>> that’s been closed. I have tried to look at asyncore and see if I can have 
>> an asynchronous socket but haven’t had any luck and my application’s seems 
>> to lock/freeze the few times I have tried. Is there a way I can have the 
>> socket remain connected so I can have flows sent constantly and also be able 
>> to receive data when sent from the external application. I would like a 
>> demonstration as well if it’s possible.
>> 
>> 
>> 
>> Thanks
>> 
>> Chris
>> 
>> _______________________________________________
>> nox-dev mailing list
>> nox-dev@noxrepo.org
>> http://noxrepo.org/mailman/listinfo/nox-dev
> 
> 

_______________________________________________
nox-dev mailing list
nox-dev@noxrepo.org
http://noxrepo.org/mailman/listinfo/nox-dev

Reply via email to