Initial checkin.
Signed-off-by: Thomas Hochstein <thh@thh.name>
This commit is contained in:
commit
30132626b8
68 changed files with 5497 additions and 0 deletions
85
MOD/NotificationSocket.pm
Normal file
85
MOD/NotificationSocket.pm
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
#!/usr/bin/perl -sw
|
||||
######################################################################
|
||||
#
|
||||
# $Id: NotificationSocket.pm 266 2010-05-18 15:14:08Z alba $
|
||||
#
|
||||
# Copyright 2010 Alexander Bartolich
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
######################################################################
|
||||
package MOD::NotificationSocket;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Carp qw( confess );
|
||||
|
||||
use Socket qw(
|
||||
PF_UNIX
|
||||
sockaddr_un
|
||||
SOCK_STREAM
|
||||
SOMAXCONN
|
||||
);
|
||||
|
||||
######################################################################
|
||||
sub socket_read($;$$)
|
||||
######################################################################
|
||||
{
|
||||
my $fh = shift || confess;
|
||||
my $on_close = shift;
|
||||
my $on_debug_print = shift;
|
||||
|
||||
my $buffer;
|
||||
my $rc = sysread($fh, $buffer, 512);
|
||||
|
||||
if (!defined($rc))
|
||||
{
|
||||
if ($on_debug_print) { &$on_debug_print("socket_read $!"); }
|
||||
return undef;
|
||||
}
|
||||
|
||||
if ($rc == 0)
|
||||
{
|
||||
if ($on_debug_print) { &$on_debug_print('socket_read close'); }
|
||||
|
||||
if ($on_close) { &$on_close($fh); }
|
||||
else { close($fh) || confess; }
|
||||
return undef;
|
||||
|
||||
# Do not call close($fh), this will hang the process.
|
||||
# Socket is automatically closed when the last reference is freed.
|
||||
# $irc->removefh($fh) || confess;
|
||||
# return;
|
||||
}
|
||||
|
||||
$buffer =~ s/\s+$//;
|
||||
if ($on_debug_print) { &$on_debug_print("socket_read rc=$rc buffer=[$buffer]"); }
|
||||
return $buffer;
|
||||
}
|
||||
|
||||
######################################################################
|
||||
sub socket_create_listening($)
|
||||
######################################################################
|
||||
{
|
||||
my $config = shift || confess;
|
||||
|
||||
my $filename = $config->{'ircbot_notify_sock'};
|
||||
return undef if (!$filename);
|
||||
|
||||
unlink($filename);
|
||||
my $uaddr = sockaddr_un($filename) || die "sockaddr_un: $!";
|
||||
my $proto = getprotobyname('tcp') || die "getprotobyname: $!";
|
||||
my $fh;
|
||||
socket($fh, PF_UNIX,SOCK_STREAM, 0) || die "socket: $!";
|
||||
bind ($fh, $uaddr) || die "bind: $!";
|
||||
listen($fh, SOMAXCONN) || die "listen: $!";
|
||||
|
||||
return $fh;
|
||||
}
|
||||
|
||||
######################################################################
|
||||
1;
|
||||
######################################################################
|
||||
Loading…
Add table
Add a link
Reference in a new issue