From 5ff1f32410e0697e581f6c389c8c22c5abd474c0 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期四, 16 五月 2019 15:17:32 +0800
Subject: [PATCH] fix

---
 nng.go |   44 +++++++++++++++++++++++++++++++-------------
 1 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/nng.go b/nng.go
index 01539a3..6cf8b52 100644
--- a/nng.go
+++ b/nng.go
@@ -24,6 +24,7 @@
 // NNG mangos wrap
 type NNG struct {
 	sock mangos.Socket
+	raw  bool
 }
 
 // Send impl interface Diliver
@@ -32,12 +33,12 @@
 		return errors.New("please init NNG first")
 	}
 
-	switch n.sock.GetProtocol().Number() {
-	case mangos.ProtoSurveyor:
-		time.Sleep(surveyorTime * 2)
-	default:
-	}
-	if _, err := n.sock.GetOption(mangos.OptionRaw); err == nil {
+	// switch n.sock.GetProtocol().Number() {
+	// case mangos.ProtoSurveyor:
+	// 	time.Sleep(surveyorTime * 2)
+	// default:
+	// }
+	if n.raw {
 		msg := mangos.NewMessage(len(data))
 		msg.Body = data
 		return n.sock.SendMsg(msg)
@@ -51,11 +52,22 @@
 	if n.sock == nil {
 		return nil, errors.New("please init NNG first")
 	}
-	if _, err := n.sock.GetOption(mangos.OptionRaw); err == nil {
-		msg, err := n.sock.RecvMsg()
-		return msg.Body, err
+	if n.raw {
+		var msg *mangos.Message
+		var err error
+		if msg, err = n.sock.RecvMsg(); err != nil {
+			return nil, err
+		}
+		return msg.Body, nil
 	}
 	return n.sock.Recv()
+}
+
+// Close impl interface Deliver
+func (n *NNG) Close() {
+	if n.sock != nil {
+		n.sock.Close()
+	}
 }
 
 // nngProducer create from deliver Mode
@@ -72,6 +84,7 @@
 		}
 		return &NNG{
 			sock,
+			true,
 		}
 	}
 
@@ -93,6 +106,7 @@
 
 		return &NNG{
 			sock,
+			true,
 		}
 	}
 
@@ -119,10 +133,14 @@
 		sock.Close()
 		return err
 	}
-	// if err = sock.SetOption(mangos.OptionNoDelay, true); err != nil {
-	// 	sock.Close()
-	// 	return err
-	// }
+	if err = sock.SetOption(mangos.OptionRecvDeadline, time.Second); err != nil {
+		sock.Close()
+		return err
+	}
+	if err = sock.SetOption(mangos.OptionSendDeadline, time.Second); err != nil {
+		sock.Close()
+		return err
+	}
 	if err = sock.SetOption(mangos.OptionRaw, true); err != nil {
 		sock.Close()
 		return err

--
Gitblit v1.8.0