Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^4: IO::Socket::INET -- Jettero verses non-blocking in windows

by jettero (Monsignor)
on Jul 30, 2004 at 15:57 UTC ( [id://378726]=note: print w/replies, xml ) Need Help??


in reply to Re^3: IO::Socket::INET -- Jettero verses non-blocking in windows
in thread IO::Socket::INET -- jettero verses non-blocking in windows

Your method really does work, so I'm closer. I just don't know how to find the sender IP. Thanks a lot BTW.

But, what I was actually asking is about how to find the sender IP. Check out the recv() I posted above.

UDP doesn't really connect, so the source IP on each packet can be different. recv() returns some packet header info from which I can get the ip addr of the sender.

Sysread doesn't do that at all. And the worse part is, the perldoc page for select() tells me that mixing your vec/select call with recv() is stupid and I'll get burnt.

So I'm not sure what to do ...

  • Comment on Re^4: IO::Socket::INET -- Jettero verses non-blocking in windows

Replies are listed 'Best First'.
Re^5: IO::Socket::INET -- Jettero verses non-blocking in windows
by tachyon (Chancellor) on Jul 30, 2004 at 16:14 UTC

    To get that info you need raw socket access. You can do it I suppose but you are getting into a fairly deep area. See this for some idea of how easy it isn't. You will note that even WinSock support for it is not a given. It depends on which flavour you are running.

    Probably the easiest workaround is to accept that the socket will block on win32. To get a non-blocking effect run two processes. The blocking UDP message acceptor process block waiting for data, as you have now. When it has something to say it says it. The other process listens effectively via a non blocking read. Ugly but it would work and is probably the easiest implementation.

    cheers

    tachyon

      Wow, thanks.

      I think I'll be giving up shortly. This is way too hard for me.

      It's 4 lines of code in Teh Lunix. I wonder why it's so hard to do in windows. Here's hoping Wx::Socket does what I need.

      I had this application toally done and working great before I even knew there was a Wx::Socket. I elected to use Wx because it's portable... by my IO::Socket wasn't portable.

      Anyway,

      Thanks a ton for all your help. It was very interesting.

        If you don't mind spawning a blocking reader to block and read data before it transmits to a non blocking process using select to listen to what the blocked one has to say.......

        There are some things that are not easy on win32.

        cheers

        tachyon

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://378726]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (6)
As of 2024-04-25 08:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found