Thanks Murphy!! I have tried testing it and I can receive the Hello World
continuously on my other application. But since I'm sending the flows from a
separate function, I have made some modifications and called the
sock.connect from my component's init() and I can receive the flows
continuously.

On Tue, Aug 16, 2011 at 6:44 AM, Murphy McCauley <jam...@nau.edu> wrote:

> 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