Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.70 KB | None | 0 0
  1. #!/usr/bin/perl
  2. #!C:\Programme\Perl\bin\perl.exe
  3.  
  4. use strict;
  5. use IO::Socket;
  6. use POSIX;
  7. print "--- Perl Forking Server Demo ---\n";
  8.  
  9. ##### Vorgaben #####
  10. my $srv_port = 9991;
  11. my(@array,$count);
  12. $count = 0;
  13.  
  14. ##### Socket #####
  15. my $sock = new IO::Socket::INET(
  16. LocalPort => $srv_port,
  17. Proto => 'tcp',
  18. Listen => SOMAXCONN);
  19. $sock or die "Error: No socket: $!\n";
  20. STDOUT->autoflush(1);
  21. my($csock,$cline,$ppid,$cpid);
  22. $ppid=$$; # parent PID
  23.      
  24.  
  25. ##### Listen-Schleife #####
  26. while ($csock = $sock->accept()) {
  27. $cpid = fork();
  28. if (!defined($cpid)) {die "Fork error ";}
  29. if ($cpid) {
  30. print "Parent: ppid=$ppid, cpid=$cpid\n";
  31. close $csock;
  32. }
  33. else{ # Child process if cpid=0
  34. print "Child: ppid=$ppid, cpid=$$\n";
  35. close $sock;
  36. $count ++;
  37. print "nr $count - neuer client: " . $csock . "\n";
  38.  
  39. @array[$count] = $csock;
  40.  
  41. print $csock "Here is the forking server.\n";
  42. while (defined($cline = <$csock>)) {
  43. $cline=~s/[\x0D\x0A]//g; # trim
  44. print "child cline=<$cline>\n";
  45. if($cline=~m/help/i || $cline=~m/\?/) {
  46. print $csock "help, date, time, quit, stop\n";
  47. }
  48. elsif($cline=~m/date/i) {
  49. print $csock strftime('%Y-%m-%d',localtime(time()))."\n";
  50. }
  51. elsif($cline=~m/time/i) {
  52. print $csock strftime('%H:%M:%S',localtime(time()))."\n";
  53. }
  54. elsif($cline=~m/alert/i) {
  55.   print $sock "ALERT!!!\n";
  56. foreach (@array){
  57. print "$_ ";
  58. }
  59. }
  60. elsif($cline=~m/quit/i) {
  61. print $csock "Quit detected";
  62. print "Client Quit detected\n";
  63. last;
  64. }
  65. elsif($cline=~m/stop/i) {
  66. print $csock "STOP detected";
  67. print "Server STOP detected\n";
  68. kill 9,$ppid;
  69. last;
  70. }
  71. else{print $csock "Unknown: <$cline>\n";}
  72. } # end while
  73. print "Child exit\n";
  74. exit 0;
  75. } # end child process
  76. } # end while accept
  77. print "Never executed\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement