Skip to content

Commit

Permalink
clear unix addr before sever startup
Browse files Browse the repository at this point in the history
  • Loading branch information
Reasno committed May 28, 2020
1 parent 447f371 commit a935564
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 0 deletions.
1 change: 1 addition & 0 deletions example/main.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
* @contact guxi99@gmail.com
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/

use Hyperf\GoTask\GoTask;
use Hyperf\GoTask\IPC\SocketIPCSender;
use Swoole\Process;
Expand Down
14 changes: 14 additions & 0 deletions pkg/gotask/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,14 @@ func Run() error {

if *address != "" {
network, addr := parseAddr(*address)
if err := clearAddr(network, addr); err != nil {
return errors.Wrap(err, "Cannot remove existing unix socket")
}
ln, err := net.Listen(network, addr)
if err != nil {
return errors.Wrap(err, "Unable to listen")
}

g.Add(func() error {
for {
conn, err := ln.Accept()
Expand Down Expand Up @@ -121,6 +125,16 @@ func Run() error {
return g.Run()
}

func clearAddr(network string, addr string) error {
if network != "unix" {
return nil
}
if _, err := os.Stat(addr); os.IsNotExist(err) {
return nil
}
return os.Remove(addr)
}

// Add an actor (function) to the group. Each actor must be pre-emptable by an
// interrupt function. That is, if interrupt is invoked, execute should return.
// Also, it must be safe to call interrupt even after execute has returned.
Expand Down
28 changes: 28 additions & 0 deletions pkg/gotask/server_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package gotask

import (
"log"
"os"
"testing"
)

func TestClearAddr(t *testing.T) {
if err := clearAddr("unix", "/tmp/non-exist.sock"); err != nil {
t.Errorf("clearAddr should not return error for non-exist files")
}
if err := clearAddr("tcp", "127.0.0.1:6000"); err != nil {
t.Errorf("clearAddr should not return error for tcp ports")
}
file, err := os.Create("/tmp/temp.sock")
if err != nil {
log.Fatal(err)
}
defer file.Close()
if err := clearAddr("unix", "/tmp/temp.sock"); err != nil {
t.Errorf("clearAddr should be able to clear unix socket")
}
_, err = os.Stat("/tmp/temp.sock")
if !os.IsNotExist(err) {
t.Errorf("unix socket are not cleared, %v", err)
}
}

0 comments on commit a935564

Please sign in to comment.