Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
Slettet bruger
20. juni 2007 - 19:10#1
Jeg kom uden om problemet ved at bruge følgende:
local $SIG{ALRM} = sub {exit;}; alarm 15;
Dette virker dog kun da jeg bruger fork(), og kan tåle at miste child processer. Så skriv endelig hvis du finder et svar til det oprindelige spørgsmål.
Problemet er - så vidt jeg forstår - at den option ligger lige på grænsen af, hvad OS'er implementerer af features for sockets. Derfor er det ikke sært, at den bare griner og ellers gør ingenting, når du skifter OS.
Du behøver dog ikke at bruge fork's, men kan bare sætte din socket til, at være non-blocking og så bruge select kald (ret nemt med IO::Select), til at se, om noget rykker på din socket. På den måde, kan du selv kode din timeout i stil med (total pseudo):
Jamen, IO::Socket nedarver jo fra IO::Handle, så efter du har oprettet objektet (IO::Socket) han du anvende dens globject som et filehandle til alle funktioner der behøver sådan et, fuldstændig uden, at perl lægger mærke til det.
my $iaddr = inet_aton($ip); my $paddr = sockaddr_in($port, $iaddr); my $ret = connect($sock, $paddr);
Derfor vil din øvrige kode sikkert være ligeglad med hvad du bruger? IO::Socket er bare pænere, hvis du spørger mig :) Ellers tvinger du den bare med hård hånd:
$flags = ''; fcntl(HANDLE, F_GETFL, $flags) or die "Couldn't get flags for HANDLE : $!\n"; $flags |= O_NONBLOCK; fcntl(HANDLE, F_SETFL, $flags) or die "Couldn't set flags for HANDLE: $!\n";
og bruger det almindelig select kald som beskrevet på perldoc.perl.org.
Synes godt om
Slettet bruger
05. september 2007 - 11:38#5
Jeg bruger hverken IO::Socket eller IO::Handle. Jeg bruger bare "Socket".
Jæs, men fordi IO::Socket nedarver fra IO::Handle, kan du bruge det objekt alle steder hvor, du ellers bare ville bruge et filehandle. Derfor kan du udskifte dit socket(FH,osv, osv) kald med et nye IO::Socket objekt, og resten af din kode, der forventer et filehandle vil fungere. Du skal selvfølgelig rette FH til $obj eller noget, men det er også det.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.