make DXUser use JSON::XS and Sqlite
[spider.git] / perl / Msg.pm
index 60906c5964df83b0e547cd28628caaafefdf149c..d44d4f4f5ea0d25d5d6b32d80fa78b2657cb2c15 100644 (file)
@@ -234,9 +234,14 @@ sub disconnect
                }
        }
 
-       if (defined($sock)) {
+       if (ref $sock && $sock->isa('AnyEvent::Handle') && exists $sock->{fh}) {
                shutdown($sock->{fh}, 2);
                $sock->destroy;
+       } else {
+               my $s;
+               $s = "already destroyed" unless exists $sock->{fh};
+               $s ||= ref $sock || $sock || "undefined";
+               dbg("Msg::disconnect trying to disconnect a $s socket") if isdbg('chan');
        }
        
        unless ($main::is_win) {
@@ -408,12 +413,12 @@ sub new_client {
                my ($rproc, $eproc) = &{$server_conn->{rproc}} ($conn, $conn->{peerhost} = $peerhost, $conn->{peerport} = $peerport);
                dbg("accept $conn->{cnum} from $conn->{peerhost} $conn->{peerport}") if isdbg('connll');
                $conn->{sort} = 'Incoming';
+               $conn->{sock}->on_read(sub {$conn->_rcv});
                if ($eproc) {
                        $conn->{eproc} = $eproc;
                }
                if ($rproc) {
                        $conn->{rproc} = $rproc;
-                       $conn->{sock}->on_read(sub {$conn->_rcv});
                } else {  # Login failed
                        &{$conn->{eproc}}($conn, undef) if exists $conn->{eproc};
                        $conn->disconnect();