| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package IO::Handle::Record; |
|
2
|
|
|
|
|
|
|
|
|
3
|
12
|
|
|
12
|
|
575290
|
use 5.008008; |
|
|
12
|
|
|
|
|
44
|
|
|
|
12
|
|
|
|
|
420
|
|
|
4
|
12
|
|
|
12
|
|
62
|
use strict; |
|
|
12
|
|
|
|
|
26
|
|
|
|
12
|
|
|
|
|
378
|
|
|
5
|
12
|
|
|
12
|
|
54
|
use warnings; |
|
|
12
|
|
|
|
|
34
|
|
|
|
12
|
|
|
|
|
370
|
|
|
6
|
12
|
|
|
12
|
|
13104
|
use Storable; |
|
|
12
|
|
|
|
|
42602
|
|
|
|
12
|
|
|
|
|
784
|
|
|
7
|
12
|
|
|
|
|
106
|
use Class::Member::GLOB qw/record_opts |
|
8
|
|
|
|
|
|
|
read_buffer expected expect_fds received_fds |
|
9
|
|
|
|
|
|
|
end_of_input _received_fds |
|
10
|
12
|
|
|
12
|
|
10686
|
write_buffer fds_to_send written/; |
|
|
12
|
|
|
|
|
112976
|
|
|
11
|
12
|
|
|
12
|
|
11984
|
use Errno qw/EAGAIN EINTR/; |
|
|
12
|
|
|
|
|
15504
|
|
|
|
12
|
|
|
|
|
1374
|
|
|
12
|
12
|
|
|
12
|
|
64
|
use Carp; |
|
|
12
|
|
|
|
|
34
|
|
|
|
12
|
|
|
|
|
874
|
|
|
13
|
|
|
|
|
|
|
my $have_inet6; |
|
14
|
|
|
|
|
|
|
BEGIN { |
|
15
|
12
|
|
|
12
|
|
26
|
eval { |
|
16
|
12
|
|
|
|
|
4972
|
require Socket6; |
|
17
|
0
|
|
|
|
|
0
|
$have_inet6=1; |
|
18
|
|
|
|
|
|
|
}; |
|
19
|
|
|
|
|
|
|
}; |
|
20
|
12
|
|
|
12
|
|
10736
|
use Socket; |
|
|
12
|
|
|
|
|
72944
|
|
|
|
12
|
|
|
|
|
8484
|
|
|
21
|
|
|
|
|
|
|
require XSLoader; |
|
22
|
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
our $VERSION = '0.15'; |
|
24
|
|
|
|
|
|
|
XSLoader::load('IO::Handle::Record', $VERSION); |
|
25
|
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
use constant { |
|
27
|
12
|
|
|
|
|
2362
|
HEADERLENGTH=>8, # 2 unsigned long |
|
28
|
12
|
|
|
12
|
|
96
|
}; |
|
|
12
|
|
|
|
|
100
|
|
|
29
|
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
# this is called from the XS stuff in recvmsg |
|
31
|
|
|
|
|
|
|
sub open_fd { |
|
32
|
8
|
|
|
8
|
0
|
18
|
my ($fd, $flags)=@_; |
|
33
|
12
|
|
|
12
|
|
54
|
use Fcntl qw/O_APPEND O_RDONLY O_WRONLY O_RDWR O_ACCMODE/; |
|
|
12
|
|
|
|
|
18
|
|
|
|
12
|
|
|
|
|
628
|
|
|
34
|
12
|
|
|
12
|
|
11500
|
use POSIX (); |
|
|
12
|
|
|
|
|
95652
|
|
|
|
12
|
|
|
|
|
338
|
|
|
35
|
12
|
|
|
12
|
|
102
|
use IO::Handle (); |
|
|
12
|
|
|
|
|
22
|
|
|
|
12
|
|
|
|
|
26588
|
|
|
36
|
|
|
|
|
|
|
|
|
37
|
8
|
100
|
|
|
|
55
|
if( ($flags & O_ACCMODE) == O_RDONLY ) { |
|
|
|
100
|
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
38
|
6
|
|
|
|
|
31
|
$flags='<'; |
|
39
|
|
|
|
|
|
|
} elsif( ($flags & O_ACCMODE) == O_WRONLY ) { |
|
40
|
1
|
50
|
|
|
|
7
|
if( $flags & O_APPEND ) { |
|
41
|
0
|
|
|
|
|
0
|
$flags='>>'; |
|
42
|
|
|
|
|
|
|
} else { |
|
43
|
1
|
|
|
|
|
8
|
$flags='>'; |
|
44
|
|
|
|
|
|
|
} |
|
45
|
|
|
|
|
|
|
} elsif( ($flags & O_ACCMODE) == O_RDWR ) { |
|
46
|
1
|
50
|
|
|
|
4
|
if( $flags & O_APPEND ) { |
|
47
|
0
|
|
|
|
|
0
|
$flags='+>>'; |
|
48
|
|
|
|
|
|
|
} else { |
|
49
|
1
|
|
|
|
|
10
|
$flags='+>'; |
|
50
|
|
|
|
|
|
|
} |
|
51
|
|
|
|
|
|
|
} else { |
|
52
|
0
|
|
|
|
|
0
|
POSIX::close($fd); |
|
53
|
0
|
|
|
|
|
0
|
return undef; |
|
54
|
|
|
|
|
|
|
} |
|
55
|
|
|
|
|
|
|
|
|
56
|
8
|
|
|
|
|
108
|
my $obj=bless IO::Handle->new_from_fd($fd, $flags), |
|
57
|
|
|
|
|
|
|
IO::Handle::Record::typeof($fd); |
|
58
|
|
|
|
|
|
|
|
|
59
|
8
|
100
|
|
|
|
1305
|
if( ref($obj)=~/Socket/ ) { |
|
60
|
1
|
|
|
|
|
6
|
${*$obj}{io_socket_domain}=socket_family($fd); |
|
|
1
|
|
|
|
|
7
|
|
|
61
|
1
|
|
|
|
|
8
|
${*$obj}{io_socket_type}=socket_type($fd); |
|
|
1
|
|
|
|
|
4
|
|
|
62
|
|
|
|
|
|
|
|
|
63
|
1
|
50
|
33
|
|
|
24
|
if($obj->sockdomain==AF_INET or |
|
|
|
|
33
|
|
|
|
|
|
64
|
|
|
|
|
|
|
($have_inet6 and $obj->sockdomain==&Socket6::AF_INET6) ) { |
|
65
|
0
|
0
|
|
|
|
0
|
if($obj->socktype==SOCK_STREAM) { |
|
|
|
0
|
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
66
|
0
|
|
|
|
|
0
|
${*$obj}{io_socket_proto}=&Socket::IPPROTO_TCP; |
|
|
0
|
|
|
|
|
0
|
|
|
67
|
|
|
|
|
|
|
} elsif($obj->socktype==SOCK_DGRAM) { |
|
68
|
0
|
|
|
|
|
0
|
${*$obj}{io_socket_proto}=&Socket::IPPROTO_UDP; |
|
|
0
|
|
|
|
|
0
|
|
|
69
|
|
|
|
|
|
|
} elsif($obj->socktype==SOCK_RAW) { |
|
70
|
0
|
|
|
|
|
0
|
${*$obj}{io_socket_proto}=&Socket::IPPROTO_ICMP; |
|
|
0
|
|
|
|
|
0
|
|
|
71
|
|
|
|
|
|
|
} |
|
72
|
|
|
|
|
|
|
} |
|
73
|
|
|
|
|
|
|
} |
|
74
|
|
|
|
|
|
|
|
|
75
|
8
|
|
|
|
|
160
|
return $obj; |
|
76
|
|
|
|
|
|
|
} |
|
77
|
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
sub read_record { |
|
79
|
89
|
|
|
89
|
1
|
11062806
|
my $I=shift; |
|
80
|
|
|
|
|
|
|
|
|
81
|
|
|
|
|
|
|
my $reader=(issock($I) |
|
82
|
46
|
50
|
|
46
|
|
254713
|
? sub { recvmsg( $_[0], $_[1], $_[2], (@_>3?$_[3]:0) ); } |
|
83
|
89
|
50
|
|
135
|
|
2257
|
: sub { sysread $_[0], $_[1], $_[2], (@_>3?$_[3]:()); }); |
|
|
135
|
100
|
|
|
|
69704
|
|
|
84
|
|
|
|
|
|
|
|
|
85
|
89
|
100
|
|
|
|
1342
|
unless( defined $I->expected ) { |
|
86
|
54
|
|
|
|
|
1897
|
undef $I->end_of_input; |
|
87
|
54
|
100
|
|
|
|
2136
|
undef $I->received_fds if( $I->can('received_fds') ); |
|
88
|
54
|
100
|
|
|
|
902
|
$I->read_buffer='' unless( defined $I->read_buffer ); |
|
89
|
54
|
|
|
|
|
4520
|
my $buflen=length($I->read_buffer); |
|
90
|
54
|
|
|
|
|
1777
|
while( $buflen
|
|
91
|
68
|
|
|
|
|
272
|
my $len=$reader->( $I, $I->read_buffer, HEADERLENGTH-$buflen, $buflen ); |
|
92
|
68
|
100
|
100
|
|
|
1767
|
if( defined($len) && $len==0 ) { # EOF |
|
|
|
100
|
66
|
|
|
|
|
|
|
|
50
|
33
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
93
|
5
|
|
|
|
|
52
|
undef $I->read_buffer; |
|
94
|
5
|
|
|
|
|
174
|
$I->end_of_input=1; |
|
95
|
5
|
|
|
|
|
126
|
return; |
|
96
|
|
|
|
|
|
|
} elsif( !defined($len) && $!==EAGAIN ) { |
|
97
|
14
|
|
|
|
|
164
|
return; # non blocking file handle |
|
98
|
|
|
|
|
|
|
} elsif( !defined($len) && $!==EINTR ) { |
|
99
|
0
|
|
|
|
|
0
|
next; # interrupted |
|
100
|
|
|
|
|
|
|
} elsif( !$len ) { # ERROR |
|
101
|
0
|
|
|
|
|
0
|
$len=length $I->read_buffer; |
|
102
|
0
|
|
|
|
|
0
|
undef $I->read_buffer; |
|
103
|
0
|
|
|
|
|
0
|
croak "IO::Handle::Record: sysread"; |
|
104
|
|
|
|
|
|
|
} |
|
105
|
49
|
|
|
|
|
204
|
$buflen+=$len; |
|
106
|
|
|
|
|
|
|
} |
|
107
|
35
|
100
|
100
|
|
|
387
|
my $L=($I->record_opts && $I->record_opts->{local_encoding}) ? 'L' : 'N'; |
|
108
|
35
|
100
|
|
|
|
1460
|
if( $I->can('expect_fds') ) { |
|
109
|
17
|
|
|
|
|
491
|
($I->expected, $I->expect_fds)=unpack $L.'2', $I->read_buffer; |
|
110
|
|
|
|
|
|
|
} else { |
|
111
|
18
|
|
|
|
|
2518
|
($I->expected)=unpack $L.'2', $I->read_buffer; |
|
112
|
|
|
|
|
|
|
} |
|
113
|
35
|
|
|
|
|
1747
|
$I->read_buffer=''; |
|
114
|
|
|
|
|
|
|
} |
|
115
|
|
|
|
|
|
|
|
|
116
|
70
|
|
|
|
|
1512
|
my $wanted=$I->expected; |
|
117
|
70
|
|
|
|
|
1248
|
my $buflen=length($I->read_buffer); |
|
118
|
70
|
|
|
|
|
1617
|
while( $buflen<$wanted ) { |
|
119
|
113
|
|
|
|
|
614
|
my $len=$reader->( $I, $I->read_buffer, $wanted-$buflen, $buflen ); |
|
120
|
|
|
|
|
|
|
|
|
121
|
113
|
100
|
66
|
|
|
1365
|
if( defined $len and $len>0 ) { |
|
|
|
50
|
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
122
|
78
|
|
|
|
|
278
|
$buflen+=$len; |
|
123
|
|
|
|
|
|
|
} elsif( defined $len ) { # EOF |
|
124
|
0
|
|
|
|
|
0
|
$len=length $I->read_buffer; |
|
125
|
0
|
|
|
|
|
0
|
undef $I->read_buffer; |
|
126
|
0
|
|
|
|
|
0
|
croak "IO::Handle::Record: premature end of file"; |
|
127
|
|
|
|
|
|
|
} elsif( $!==EAGAIN ) { |
|
128
|
35
|
|
|
|
|
747
|
return; |
|
129
|
|
|
|
|
|
|
} elsif( $!==EINTR ) { |
|
130
|
0
|
|
|
|
|
0
|
next; |
|
131
|
|
|
|
|
|
|
} else { |
|
132
|
0
|
|
|
|
|
0
|
undef $I->read_buffer; |
|
133
|
0
|
|
|
|
|
0
|
croak "IO::Handle::Record: sysread"; |
|
134
|
|
|
|
|
|
|
} |
|
135
|
|
|
|
|
|
|
} |
|
136
|
|
|
|
|
|
|
|
|
137
|
35
|
100
|
100
|
|
|
358
|
if( $I->can('expect_fds') and |
|
|
|
|
66
|
|
|
|
|
|
138
|
|
|
|
|
|
|
$I->expect_fds>0 and defined $I->_received_fds ) { |
|
139
|
3
|
|
|
|
|
152
|
$I->received_fds=[splice @{$I->_received_fds}, 0, $I->expect_fds]; |
|
|
3
|
|
|
|
|
12
|
|
|
140
|
|
|
|
|
|
|
} |
|
141
|
35
|
|
|
|
|
536
|
my $rc=eval { |
|
142
|
35
|
|
|
|
|
94
|
local $Storable::Eval; |
|
143
|
35
|
100
|
|
|
|
151
|
$I->record_opts and $Storable::Eval=$I->record_opts->{receive_CODE}; |
|
144
|
35
|
|
|
|
|
736
|
Storable::thaw( $I->read_buffer ); |
|
145
|
|
|
|
|
|
|
}; |
|
146
|
35
|
50
|
|
|
|
12731
|
if( $@ ) { |
|
147
|
0
|
|
|
|
|
0
|
my $e=$@; |
|
148
|
0
|
|
|
|
|
0
|
$e=~s/ at .*//s; |
|
149
|
0
|
|
|
|
|
0
|
croak $e; |
|
150
|
|
|
|
|
|
|
} |
|
151
|
|
|
|
|
|
|
|
|
152
|
35
|
|
|
|
|
159
|
undef $I->expected; |
|
153
|
35
|
|
|
|
|
662
|
undef $I->read_buffer; |
|
154
|
|
|
|
|
|
|
|
|
155
|
35
|
|
|
|
|
443
|
return @{$rc}; |
|
|
35
|
|
|
|
|
63345
|
|
|
156
|
|
|
|
|
|
|
} |
|
157
|
|
|
|
|
|
|
|
|
158
|
|
|
|
|
|
|
sub write_record { |
|
159
|
37
|
|
|
37
|
1
|
644065
|
my $I=shift; |
|
160
|
|
|
|
|
|
|
|
|
161
|
|
|
|
|
|
|
my $writer=(issock($I) |
|
162
|
28
|
100
|
|
28
|
|
23788
|
? sub { sendmsg( $_[0], $_[1], $_[2], (@_>3?$_[3]:0) ); } |
|
163
|
37
|
50
|
|
16
|
|
808
|
: sub { syswrite $_[0], $_[1], $_[2], (@_>3?$_[3]:()); }); |
|
|
16
|
100
|
|
|
|
8650
|
|
|
164
|
|
|
|
|
|
|
|
|
165
|
37
|
|
|
|
|
409
|
my $can_fds_to_send=$I->can('fds_to_send'); |
|
166
|
37
|
100
|
|
|
|
185
|
if( @_ ) { |
|
167
|
33
|
50
|
|
|
|
295
|
croak "IO::Handle::Record: busy" |
|
168
|
|
|
|
|
|
|
if( defined $I->write_buffer ); |
|
169
|
33
|
50
|
66
|
|
|
933
|
my $L=($I->record_opts && $I->record_opts->{local_encoding}) ? 'L' : 'N'; |
|
170
|
33
|
|
|
|
|
946
|
my $msg=eval { |
|
171
|
33
|
|
|
|
|
136
|
local $Storable::Deparse; |
|
172
|
33
|
|
|
|
|
159
|
local $Storable::forgive_me; |
|
173
|
33
|
100
|
|
|
|
119
|
$I->record_opts and do { |
|
174
|
16
|
|
|
|
|
317
|
$Storable::forgive_me=$I->record_opts->{forgive_me}; |
|
175
|
16
|
|
|
|
|
219
|
$Storable::Deparse=$I->record_opts->{send_CODE}; |
|
176
|
|
|
|
|
|
|
}; |
|
177
|
33
|
|
|
1
|
|
1014
|
local $SIG{__WARN__}=sub {}; |
|
|
1
|
|
|
|
|
137
|
|
|
178
|
33
|
50
|
|
|
|
1099
|
$L eq 'L' |
|
179
|
|
|
|
|
|
|
? Storable::freeze \@_ |
|
180
|
|
|
|
|
|
|
: Storable::nfreeze \@_; |
|
181
|
|
|
|
|
|
|
}; |
|
182
|
33
|
50
|
|
|
|
24256
|
if( $@ ) { |
|
183
|
0
|
|
|
|
|
0
|
my $e=$@; |
|
184
|
0
|
|
|
|
|
0
|
$e=~s/ at .*//s; |
|
185
|
0
|
|
|
|
|
0
|
croak $e; |
|
186
|
|
|
|
|
|
|
} |
|
187
|
|
|
|
|
|
|
|
|
188
|
33
|
100
|
|
|
|
100
|
if( $can_fds_to_send ) { |
|
189
|
4
|
|
|
|
|
77
|
$I->write_buffer=pack( $L.'2', length($msg), |
|
190
|
|
|
|
|
|
|
(defined $I->fds_to_send |
|
191
|
17
|
100
|
|
|
|
122
|
? 0+@{$I->fds_to_send} |
|
192
|
|
|
|
|
|
|
: 0) ).$msg; |
|
193
|
|
|
|
|
|
|
} else { |
|
194
|
16
|
|
|
|
|
142
|
$I->write_buffer=pack( $L.'2', length($msg), 0 ).$msg; |
|
195
|
|
|
|
|
|
|
} |
|
196
|
33
|
|
|
|
|
9746
|
$I->written=0; |
|
197
|
|
|
|
|
|
|
} |
|
198
|
|
|
|
|
|
|
|
|
199
|
37
|
|
|
|
|
457
|
my $written; |
|
200
|
|
|
|
|
|
|
|
|
201
|
|
|
|
|
|
|
# if there are file descriptors to send send them first along with the length |
|
202
|
|
|
|
|
|
|
# header only. (work around a bug in the suse 11.1 kernel) |
|
203
|
37
|
100
|
100
|
|
|
127
|
if( $I->written==0 and |
|
|
4
|
|
100
|
|
|
164
|
|
|
|
|
|
100
|
|
|
|
|
|
204
|
|
|
|
|
|
|
$can_fds_to_send and |
|
205
|
|
|
|
|
|
|
defined $I->fds_to_send and |
|
206
|
|
|
|
|
|
|
@{$I->fds_to_send} ) { |
|
207
|
3
|
|
|
|
|
45
|
while(!defined ($written=$writer->($I, $I->write_buffer, HEADERLENGTH))) { |
|
208
|
0
|
0
|
|
|
|
0
|
if( $!==EINTR ) { |
|
|
|
0
|
|
|
|
|
|
|
209
|
0
|
|
|
|
|
0
|
next; |
|
210
|
|
|
|
|
|
|
} elsif( $!==EAGAIN ) { |
|
211
|
0
|
|
|
|
|
0
|
return; |
|
212
|
|
|
|
|
|
|
} else { |
|
213
|
0
|
|
|
|
|
0
|
croak "IO::Handle::Record: syswrite"; |
|
214
|
|
|
|
|
|
|
} |
|
215
|
|
|
|
|
|
|
} |
|
216
|
3
|
|
|
|
|
17
|
$I->written+=$written; |
|
217
|
|
|
|
|
|
|
} |
|
218
|
|
|
|
|
|
|
|
|
219
|
37
|
|
66
|
|
|
1031
|
while( $I->writtenwrite_buffer) and |
|
|
|
|
66
|
|
|
|
|
|
220
|
|
|
|
|
|
|
(defined ($written=$writer->($I, $I->write_buffer, |
|
221
|
|
|
|
|
|
|
length($I->write_buffer)-$I->written, |
|
222
|
|
|
|
|
|
|
$I->written)) or |
|
223
|
|
|
|
|
|
|
$!==EINTR) ) { |
|
224
|
37
|
50
|
|
|
|
209
|
if( defined $written ) { |
|
225
|
37
|
|
|
|
|
181
|
$I->written+=$written; |
|
226
|
|
|
|
|
|
|
} |
|
227
|
|
|
|
|
|
|
} |
|
228
|
37
|
100
|
|
|
|
2080
|
if( $I->written==length($I->write_buffer) ) { |
|
|
|
50
|
|
|
|
|
|
|
229
|
33
|
|
|
|
|
1854
|
undef $I->write_buffer; |
|
230
|
33
|
|
|
|
|
740
|
undef $I->written; |
|
231
|
33
|
|
|
|
|
21498
|
return 1; |
|
232
|
|
|
|
|
|
|
} elsif( $!==EAGAIN ) { |
|
233
|
4
|
|
|
|
|
2055
|
return; |
|
234
|
|
|
|
|
|
|
} else { |
|
235
|
0
|
|
|
|
|
|
croak "IO::Handle::Record: syswrite"; |
|
236
|
|
|
|
|
|
|
} |
|
237
|
|
|
|
|
|
|
} |
|
238
|
|
|
|
|
|
|
|
|
239
|
|
|
|
|
|
|
sub read_simple_record { |
|
240
|
0
|
|
|
0
|
0
|
|
my $I=shift; |
|
241
|
0
|
|
|
|
|
|
local $/; |
|
242
|
0
|
|
|
|
|
|
my $delim; |
|
243
|
0
|
0
|
|
|
|
|
if( $I->record_opts ) { |
|
244
|
0
|
|
0
|
|
|
|
$/=$I->record_opts->{record_delimiter} || "\n"; |
|
245
|
0
|
|
0
|
|
|
|
$delim=$I->record_opts->{field_delimiter} || "\0"; |
|
246
|
|
|
|
|
|
|
} else { |
|
247
|
0
|
|
|
|
|
|
$/="\n"; |
|
248
|
0
|
|
|
|
|
|
$delim="\0"; |
|
249
|
|
|
|
|
|
|
} |
|
250
|
|
|
|
|
|
|
|
|
251
|
0
|
|
|
|
|
|
my $r=<$I>; |
|
252
|
0
|
0
|
|
|
|
|
return unless( defined $r ); # EOF |
|
253
|
|
|
|
|
|
|
|
|
254
|
0
|
|
|
|
|
|
chomp $r; |
|
255
|
0
|
|
|
|
|
|
return split /\Q$delim\E/, $r; |
|
256
|
|
|
|
|
|
|
} |
|
257
|
|
|
|
|
|
|
|
|
258
|
|
|
|
|
|
|
sub write_simple_record { |
|
259
|
0
|
|
|
0
|
0
|
|
my $I=shift; |
|
260
|
0
|
|
|
|
|
|
my $rdelim; |
|
261
|
|
|
|
|
|
|
my $delim; |
|
262
|
0
|
0
|
|
|
|
|
if( $I->record_opts ) { |
|
263
|
0
|
|
0
|
|
|
|
$rdelim=$I->record_opts->{record_delimiter} || "\n"; |
|
264
|
0
|
|
0
|
|
|
|
$delim=$I->record_opts->{field_delimiter} || "\0"; |
|
265
|
|
|
|
|
|
|
} else { |
|
266
|
0
|
|
|
|
|
|
$rdelim="\n"; |
|
267
|
0
|
|
|
|
|
|
$delim="\0"; |
|
268
|
|
|
|
|
|
|
} |
|
269
|
|
|
|
|
|
|
|
|
270
|
0
|
|
|
|
|
|
print( $I join( $delim , @_ ), $rdelim ); |
|
271
|
0
|
|
|
|
|
|
$I->flush; |
|
272
|
|
|
|
|
|
|
} |
|
273
|
|
|
|
|
|
|
|
|
274
|
|
|
|
|
|
|
*IO::Handle::write_record=\&write_record; |
|
275
|
|
|
|
|
|
|
*IO::Handle::read_record=\&read_record; |
|
276
|
|
|
|
|
|
|
*IO::Handle::end_of_input=\&end_of_input; |
|
277
|
|
|
|
|
|
|
*IO::Handle::write_simple_record=\&write_simple_record; |
|
278
|
|
|
|
|
|
|
*IO::Handle::read_simple_record=\&read_simple_record; |
|
279
|
|
|
|
|
|
|
*IO::Handle::record_opts=\&record_opts; |
|
280
|
|
|
|
|
|
|
*IO::Handle::expected=\&expected; |
|
281
|
|
|
|
|
|
|
*IO::Socket::UNIX::expect_fds=\&expect_fds; |
|
282
|
|
|
|
|
|
|
*IO::Handle::read_buffer=\&read_buffer; |
|
283
|
|
|
|
|
|
|
*IO::Socket::UNIX::received_fds=\&received_fds; |
|
284
|
|
|
|
|
|
|
*IO::Socket::UNIX::_received_fds=\&_received_fds; |
|
285
|
|
|
|
|
|
|
*IO::Handle::written=\&written; |
|
286
|
|
|
|
|
|
|
*IO::Handle::write_buffer=\&write_buffer; |
|
287
|
|
|
|
|
|
|
*IO::Socket::UNIX::fds_to_send=\&fds_to_send; |
|
288
|
|
|
|
|
|
|
*IO::Socket::UNIX::peercred=\&peercred; |
|
289
|
|
|
|
|
|
|
|
|
290
|
|
|
|
|
|
|
1; |
|
291
|
|
|
|
|
|
|
__END__ |