Skip to content

Commit a935564

Browse files
committed
clear unix addr before sever startup
1 parent 447f371 commit a935564

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

example/main.php

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
* @contact [email protected]
1010
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
1111
*/
12+
1213
use Hyperf\GoTask\GoTask;
1314
use Hyperf\GoTask\IPC\SocketIPCSender;
1415
use Swoole\Process;

pkg/gotask/server.go

+14
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,14 @@ func Run() error {
7070

7171
if *address != "" {
7272
network, addr := parseAddr(*address)
73+
if err := clearAddr(network, addr); err != nil {
74+
return errors.Wrap(err, "Cannot remove existing unix socket")
75+
}
7376
ln, err := net.Listen(network, addr)
7477
if err != nil {
7578
return errors.Wrap(err, "Unable to listen")
7679
}
80+
7781
g.Add(func() error {
7882
for {
7983
conn, err := ln.Accept()
@@ -121,6 +125,16 @@ func Run() error {
121125
return g.Run()
122126
}
123127

128+
func clearAddr(network string, addr string) error {
129+
if network != "unix" {
130+
return nil
131+
}
132+
if _, err := os.Stat(addr); os.IsNotExist(err) {
133+
return nil
134+
}
135+
return os.Remove(addr)
136+
}
137+
124138
// Add an actor (function) to the group. Each actor must be pre-emptable by an
125139
// interrupt function. That is, if interrupt is invoked, execute should return.
126140
// Also, it must be safe to call interrupt even after execute has returned.

pkg/gotask/server_test.go

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package gotask
2+
3+
import (
4+
"log"
5+
"os"
6+
"testing"
7+
)
8+
9+
func TestClearAddr(t *testing.T) {
10+
if err := clearAddr("unix", "/tmp/non-exist.sock"); err != nil {
11+
t.Errorf("clearAddr should not return error for non-exist files")
12+
}
13+
if err := clearAddr("tcp", "127.0.0.1:6000"); err != nil {
14+
t.Errorf("clearAddr should not return error for tcp ports")
15+
}
16+
file, err := os.Create("/tmp/temp.sock")
17+
if err != nil {
18+
log.Fatal(err)
19+
}
20+
defer file.Close()
21+
if err := clearAddr("unix", "/tmp/temp.sock"); err != nil {
22+
t.Errorf("clearAddr should be able to clear unix socket")
23+
}
24+
_, err = os.Stat("/tmp/temp.sock")
25+
if !os.IsNotExist(err) {
26+
t.Errorf("unix socket are not cleared, %v", err)
27+
}
28+
}

0 commit comments

Comments
 (0)