summaryrefslogtreecommitdiffstats
path: root/src/jaegertracing/thrift/lib/perl/lib/Thrift/ServerSocket.pm
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/jaegertracing/thrift/lib/perl/lib/Thrift/ServerSocket.pm125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/jaegertracing/thrift/lib/perl/lib/Thrift/ServerSocket.pm b/src/jaegertracing/thrift/lib/perl/lib/Thrift/ServerSocket.pm
new file mode 100644
index 000000000..39726438b
--- /dev/null
+++ b/src/jaegertracing/thrift/lib/perl/lib/Thrift/ServerSocket.pm
@@ -0,0 +1,125 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+use 5.10.0;
+use strict;
+use warnings;
+
+use IO::Socket::INET;
+use IO::Select;
+use Thrift;
+use Thrift::Transport;
+use Thrift::Socket;
+
+package Thrift::ServerSocket;
+use base qw( Thrift::ServerTransport );
+use version 0.77; our $VERSION = version->declare("$Thrift::VERSION");
+
+#
+# Constructor.
+# Legacy construction takes one argument, port number.
+# New construction takes a hash:
+# @param[in] host host interface to listen on (undef = all interfaces)
+# @param[in] port port number to listen on (required)
+# @param[in] queue the listen queue size (default if not specified is 128)
+# @example my $serversock = Thrift::ServerSocket->new(host => undef, port => port)
+#
+sub new
+{
+ my $classname = shift;
+ my $args = shift;
+ my $self;
+
+ # Support both old-style "port number" construction and newer...
+ if (ref($args) eq 'HASH') {
+ $self = $args;
+ }
+ else {
+ $self = { port => $args };
+ }
+
+ if (not defined $self->{queue}) {
+ $self->{queue} = 128;
+ }
+
+ return bless($self, $classname);
+}
+
+sub listen
+{
+ my $self = shift;
+
+ my $sock = $self->__listen() || do {
+ my $error = ref($self) . ': Could not bind to ' . '*:' . $self->{port} . ' (' . $! . ')';
+
+ if ($self->{debug}) {
+ $self->{debugHandler}->($error);
+ }
+
+ die Thrift::TTransportException->new($error, Thrift::TTransportException::NOT_OPEN);
+ };
+
+ $self->{handle} = $sock;
+}
+
+sub accept
+{
+ my $self = shift;
+
+ if ( exists $self->{handle} and defined $self->{handle} ) {
+ my $client = $self->{handle}->accept();
+ my $result = $self->__client();
+ $result->{handle} = IO::Select->new($client);
+ return $result;
+ }
+
+ return undef;
+}
+
+sub close
+{
+ my $self = shift;
+
+ if ( exists $self->{handle} and defined $self->{handle} )
+ {
+ $self->{handle}->close();
+ }
+}
+
+###
+### Overridable methods
+###
+
+sub __client
+{
+ return Thrift::Socket->new();
+}
+
+sub __listen
+{
+ my $self = shift;
+ return IO::Socket::INET->new(LocalAddr => $self->{host},
+ LocalPort => $self->{port},
+ Proto => 'tcp',
+ Listen => $self->{queue},
+ ReuseAddr => 1);
+}
+
+
+1;