[Freeswitch-users] Server Disconnected when SIGINT occured
lakshmanan ganapathy
lakindia89 at gmail.com
Mon Jan 18 03:22:20 PST 2010
Here is the result
Program:
require ESL;
use IO::Socket::INET;
use Data::Dumper;
my $ip = "192.168.1.222";
my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447',
Proto => 'tcp', Listen => 1, Reuse => 1 );
die "Could not create socket: $!\n" unless $sock;
for(;;) {
my $new_sock = $sock->accept();
next if (not defined ($new_sock));
my $pid = fork();
if ($pid) {
close($new_sock);
next;
}
print "CHILD PID: $$\n";
®ister_Signals_Child();
sub register_Signals_Child() {
foreach ( keys %SIG ) {
$SIG{$_} = 'Handler';
}
}
sub Handler() {
my $handle=$_[0];
if($handle eq "INT") {
print "CHILD $$: SIGNAL SIG$handle is generated\n";
}
else
{
print "CHILD $$: Received $handle\n";
}
}
my $host = $new_sock->sockhost();
my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd);
my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid,
$info->getHeader("caller-caller-id-number");
my $r=$con->execute("answer");
print Dumper $r;
$con->events("plain","all");
my
$re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav");
while($con->connected()) {
my $e = $con->recvEvent();
if ($e) {
my $name = $e->getHeader("event-name");
print "EVENT [$name]\n";
if ($name eq "DTMF") {
my $digit = $e->getHeader("dtmf-digit");
print "$digit\n";
}
}
}
close($new_sock);
}
I executed the program and the following things were printed
CHILD PID: 6778
Connected call e0d1001a-03f4-11df-b002-db488337e0ea, from 1001
$VAR1 = 0;
EVENT [CHANNEL_EXECUTE]
EVENT [CHANNEL_ANSWER]
EVENT [CHANNEL_EXECUTE_COMPLETE]
EVENT [COMMAND]
EVENT [CHANNEL_EXECUTE]
EVENT [HEARTBEAT]
EVENT [RE_SCHEDULE]
EVENT [CHANNEL_EXECUTE_COMPLETE]
Then from another shell I executed kill -2 6778, the result is follows
CHILD 6778: SIGNAL SIGINT is generated
EVENT [SERVER_DISCONNECTED]
But the child process is still running as expected.
But I don't know why I received SERVER_DISCONNECTED from freeswitch???
On Thu, Jan 14, 2010 at 1:27 PM, lakshmanan ganapathy
<lakindia89 at gmail.com>wrote:
> I taught the signal handler will be inherited by the child process. It also
> does like that.
> After making a call, If I press ctrl + c, the above program printed
> PARENT PID: Signal SIGINT is generated
> CHILD PID: Signal SIGINT is generated.
>
> So I think the sigal handlers will be inherited to the child.
> Anyway I'll also try registering signal handlers in child also, and then
> I'll come back with that result.
>
> Thanks....
> On Wed, Jan 13, 2010 at 9:48 PM, Anthony Minessale <
> anthony.minessale at gmail.com> wrote:
>
>> you would have to register signals in your child process too
>>
>> On Wed, Jan 13, 2010 at 3:13 AM, lakshmanan ganapathy <
>> lakindia89 at gmail.com> wrote:
>>
>>> Hi all,
>>>
>>> I've done a sample program (In perl ESL) , which play a file to the
>>> caller and then it will call recvEvent() and print the event name. I've
>>> handled signals also.
>>>
>>> When I send SIGINT to my program (Perl), the signal handler is called and
>>> I can see the print output. But in the same time, I received
>>> SERVER_DISCONNECTED from freeswitch as event.
>>>
>>> I don't know why I received SERVER_DISCONNECTED from freeswitch. Is it
>>> because, the recvEvent() from perl internally calls the recvevent function
>>> in the Esl.c and when it waits to receive the information from socket, the
>>> signal occurred???
>>>
>>> Please clarify me!!
>>>
>>> Here is my program
>>> require ESL;
>>> use IO::Socket::INET;
>>> use Data::Dumper;
>>>
>>> my $ip = "192.168.1.222";
>>> my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort =>
>>> '8447', Proto => 'tcp', Listen => 1, Reuse => 1 );
>>> die "Could not create socket: $!\n" unless $sock;
>>> ®ister_Signals();
>>>
>>> for(;;) {
>>> my $new_sock = $sock->accept();
>>> next if (not defined ($new_sock));
>>> my $pid = fork();
>>> if ($pid) {
>>> close($new_sock);
>>> next;
>>> }
>>> print "CHILD PID: $$\n";
>>> my $host = $new_sock->sockhost();
>>> my $fd = fileno($new_sock);
>>>
>>> my $con = new ESL::ESLconnection($fd);
>>> my $info = $con->getInfo();
>>>
>>> my $uuid = $info->getHeader("unique-id");
>>>
>>> printf "Connected call %s, from %s\n", $uuid,
>>> $info->getHeader("caller-caller-id-number");
>>> my $r=$con->execute("answer");
>>> print Dumper $r;
>>> $con->events("plain","all");
>>> my
>>> $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav");
>>>
>>> while($con->connected()) {
>>> my $e = $con->recvEvent();
>>>
>>> if ($e) {
>>> my $name = $e->getHeader("event-name");
>>> print "EVENT [$name]\n";
>>> if ($name eq "DTMF") {
>>> my $digit = $e->getHeader("dtmf-digit");
>>> print "$digit\n";
>>> }
>>> }
>>> }
>>> close($new_sock);
>>> }
>>> sub register_Signals() {
>>> foreach ( keys %SIG ) {
>>> $SIG{$_} = 'sig_Handler';
>>> }
>>> }
>>>
>>> sub sig_Handler() {
>>> my $handle=$_[0];
>>> if($handle eq "INT") {
>>> print "$$: SIGNAL SIG$handle is generated\n";
>>> }
>>> }
>>>
>>>
>>> _______________________________________________
>>> FreeSWITCH-users mailing list
>>> FreeSWITCH-users at lists.freeswitch.org
>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>>> http://www.freeswitch.org
>>>
>>>
>>
>>
>> --
>> Anthony Minessale II
>>
>> FreeSWITCH http://www.freeswitch.org/
>> ClueCon http://www.cluecon.com/
>> Twitter: http://twitter.com/FreeSWITCH_wire
>>
>> AIM: anthm
>> MSN:anthony_minessale at hotmail.com <MSN%3Aanthony_minessale at hotmail.com>
>> GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com<PAYPAL%3Aanthony.minessale at gmail.com>
>> IRC: irc.freenode.net #freeswitch
>>
>> FreeSWITCH Developer Conference
>> sip:888 at conference.freeswitch.org <sip%3A888 at conference.freeswitch.org>
>> iax:guest at conference.freeswitch.org/888
>> googletalk:conf+888 at conference.freeswitch.org<googletalk%3Aconf%2B888 at conference.freeswitch.org>
>> pstn:+19193869900
>>
>> _______________________________________________
>> FreeSWITCH-users mailing list
>> FreeSWITCH-users at lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>> http://www.freeswitch.org
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20100118/edca6bcd/attachment-0002.html
More information about the FreeSWITCH-users
mailing list