Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re^10: IO::Socket Listen

by Eliya (Vicar)
on Dec 08, 2011 at 08:53 UTC ( #942378=note: print w/replies, xml ) Need Help??

in reply to Re^9: IO::Socket Listen
in thread IO::Socket Listen

Try the unbuffered read() function instead of sysread()

You've got it the wrong way round.  Perl's read function is buffered, while sysread is unbuffered.   sysread is implemented via tha low-level system (OS) call read(2) (man 2 read), which is why it's called sysread.  It's this read(2) that the documentation of sysread is talking about.

That said, flushing the socket after the print is certainly a good idea, though.

Replies are listed 'Best First'.
Re^11: IO::Socket Listen
by Marshall (Abbot) on Dec 08, 2011 at 12:08 UTC
    Ok, I stand corrected! The terminology is a bit different in C.

    I have another suggestion: Before doing this communication with the device, send a ping to google or somewhere that will answer right away. This will give a time reference in the wireshark trace. Then execute the code that transmits to this device. That should yield a delta time to send the actual packet over the network (measure from ping response time to the next packet to this gizmo going out). Then using wireshark see how long it takes for that thing to respond.

    First step is make sure that you are sending a timely packet. try the flush.

    Update: From the OP's description, I'm not sure where the delay is happening. And it sounds like the I/F spec to the device is not well specified. So for me, the first step is to verify that when the Perl code executes, that a packet gets sent right away to that device. Make sense? If that other device is "holding the ball" then I think we'll have more suggestions about how to "get it to do its thing" - probably involving some hacking and experimentation. I don't understand this 30 second delay stuff.

      Eliya and Marshall , thanks for helping.

      I used wireshark to see the response time of google and it took 3ms to answer me , when i execute my script it returns me the value right away (just like google) but it keeps alive the connection even if the information has been received , I have no idea what is happening ...

      I read some stuff about Net::Pcaps , i can try to capture the package but i don't know if it'll work ... Any sugestion ?

      Thanks a lot

        I could reduce the time to 2 seconds using Net::Pcap here is the code , I am positive that there is a easier way , but this code works for me, I hope it helps!.
        use IO::Socket; use Net::Pcap; use NetPacket::Ethernet qw(:strip); use NetPacket::TCP; use NetPacket::IP qw(:strip); use List::Util qw(first); # Find all interfaces. my @interfaces = Net::Pcap::findalldevs(\%devinfo, \$err); my $int = first { $devinfo{$_} =~ /Real/ } @interfaces; #print $int; in my case i want to find Realtech interface $snaplen = 1515; #Package lenght $promisc = 1; #Captur packages in promiscious mode $timeout = 30; $count = 12; # (count = 0 = forever) here is the number of packages yo +u want to capture my $pcap = Net::Pcap::open_live( $int,$snaplen,$promisc,$timeout,\$err ); #Select the interface you want to capture packages , and it's informat +ion my $socket = new IO::Socket::INET ( PeerAddr => '', PeerPort => '6008', Proto => 'tcp', ); die "Couldn't connect: $!\n" unless $socket; $data = pack("CccccccCcCC",02,65,63,80,81,76,86,03,100,13,10); if ( $socket ) { print $socket $data ; Net::Pcap::loop($pcap, $count, \&callback, $user_data); sleep 1; # the device takes 1 second to answer } close($socket); sub callback { my ($user_data, $header_ref, $packet) = @_; $ip = NetPacket::IP->decode(eth_strip($packet)); $tcp = NetPacket::TCP->decode($ip->{data}); if ( $tcp->{src_port} == 6008 ) { $payload = $tcp->{data}; print "$ip->{src_ip}:$tcp->{src_port} --> $ip->{dest_ip}:$tcp->{dest_p +ort} Payload: $payload\n"; } }

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://942378]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (7)
As of 2017-12-18 17:53 GMT
Find Nodes?
    Voting Booth?
    What programming language do you hate the most?

    Results (494 votes). Check out past polls.