@@ -29,16 +29,15 @@ public function isOpen(): bool
29
29
return true ;
30
30
}
31
31
32
- public function open ()
32
+ public function open (): void
33
33
{
34
34
}
35
35
36
- public function close ()
36
+ public function close (): void
37
37
{
38
38
if (null === $ this ->socket ) {
39
39
return ;
40
40
}
41
-
42
41
\socket_close ($ this ->socket );
43
42
$ this ->socket = null ;
44
43
}
@@ -48,28 +47,29 @@ public function read($len): string
48
47
return '' ;
49
48
}
50
49
51
- public function write ($ buf )
50
+ public function write ($ buf ): void
52
51
{
53
52
$ this ->buffer .= $ buf ;
54
53
}
55
54
56
- public function flush ()
55
+ public function flush (): void
57
56
{
57
+ parent ::flush ();
58
58
if ('' === $ this ->buffer ) {
59
59
return ;
60
60
}
61
-
62
61
$ this ->doWrite ($ this ->buffer );
63
62
$ this ->buffer = '' ;
64
63
}
65
64
66
- private function doWrite ($ buf )
65
+ private function doWrite ($ buf ): void
67
66
{
68
- $ socket = $ this ->getConnectedSocket ();
69
-
67
+ if (null === ($ socket = $ this ->connect ())) {
68
+ return ;
69
+ }
70
70
$ length = \strlen ($ buf );
71
71
while (true ) {
72
- if (false === $ result = @\socket_write ($ socket , $ buf )) {
72
+ if (false === ( $ result = @\socket_write ($ socket , $ buf) )) {
73
73
break ;
74
74
}
75
75
if ($ result >= $ length ) {
@@ -80,16 +80,19 @@ private function doWrite($buf)
80
80
}
81
81
}
82
82
83
- private function getConnectedSocket ()
83
+ private function connect ()
84
84
{
85
- if (null === $ this ->socket ) {
86
- if (false !== $ socket = \socket_create (AF_INET , SOCK_DGRAM , SOL_UDP )) {
85
+ $ count = 0 ;
86
+ while (false === \is_resource ($ this ->socket ) && $ count < 5 ) {
87
+ if (false !== ($ socket = \socket_create (AF_INET , SOCK_DGRAM , SOL_UDP ))) {
87
88
@\socket_connect ($ socket , $ this ->host , $ this ->port );
89
+ $ this ->socket = $ socket ;
90
+ break ;
88
91
}
89
-
90
- $ this -> socket = $ socket ;
92
+ $ count ++;
93
+ usleep ( 10 ) ;
91
94
}
92
95
93
- return $ this ->socket ;
96
+ return $ this ->socket ?: null ;
94
97
}
95
98
}
0 commit comments