Unix domain sockets in Go - Golang News https://golangnews.org/2019/02/unix-domain-sockets-in-go/

package main

import (
"fmt"
"log"
"net"
"os"
"time"
)

const SockAddr = "/tmp/echo.sock"

var reqCounter int64
var startTime time.Time

func init() {
startTime = time.Now()

}
func echoServer(c net.Conn) {
reqCounter += 1
lastMilliseconds := time.Since(startTime)
b1 := make([]byte, 128)
n, err := c.Read(b1)
fmt.Println("n, err", n, err, "b1", b1, "\nrcv\n", string(b1), "Client connected [%s]", c.RemoteAddr().Network())
c.Close()
ns := 10000000000.0
lastSeconds := float64(lastMilliseconds) / ns
fmt.Println("\nreqCounter=", reqCounter, "QPS=", float64(reqCounter)/lastSeconds)
}

func main() {

if err := os.RemoveAll(SockAddr); err != nil {
log.Fatal(err)
}

l, err := net.Listen("unix", SockAddr)
if err != nil {
log.Fatal("listen error:", err)
}
defer l.Close()

for {
// Accept new connections, dispatching them to echoServer
// in a goroutine.
conn, err := l.Accept()
if err != nil {
log.Fatal("accept error:", err)
}

go echoServer(conn)
}
}

package main

import (
"fmt"
"net"
"time"
)

const SockAddr = "/tmp/echo.sock"

func main() {

for {
c, err := net.Dial("unix", SockAddr)
if err != nil {
fmt.Println("c,err", c, err)
continue
}

clientStr := "abc世界-1--" + time.Now().String()
b1 := []byte(clientStr)
n, err := c.Write(b1)
fmt.Println(time.Now(), n, err, "clientStr\n", clientStr)

e := c.Close()
fmt.Println("e", e)

}
}


  

Go/src/net/unixsock.go:57

// ResolveUnixAddr returns an address of Unix domain socket end point.
//
// The network must be a Unix network name.
//
// See func Dial for a description of the network and address
// parameters.
func ResolveUnixAddr(network, address string) (*UnixAddr, error) {
switch network {
case "unix", "unixgram", "unixpacket":
return &UnixAddr{Name: address, Net: network}, nil
default:
return nil, UnknownNetworkError(network)
}
}

  

最新文章

  1. css小知识之伪元素
  2. 【原创】Lucene.Net+盘古分词器(详细介绍)
  3. WPF MVVM实现TreeView
  4. 【重走Android之路】【Java面向对象基础(三)】面向对象思想
  5. bootstrap学习起步篇:初识bootstrap之表单验证(二)
  6. button元素兼容问题浅析
  7. 构建混合云:配置Azure site to site VPN连接(1)
  8. DB2中coalesce函数的应用
  9. 【转】 文档与笔记利器 reStructuredText 和 Sphinx
  10. 大文件视频断点续传插件resumabel.js,优化上传速度,缩短最后一片等待时长。
  11. git本地克隆时失败: SSL certificate problem
  12. vsftp搭建
  13. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(9)- 从Parallel NOR启动
  14. Unity入门一,什么是GameObject,MonoBehaviour
  15. 安卓开发_浅谈Fragment之ListFragment
  16. YIT-CTF—社工类
  17. 【eclipse jar包】在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可。
  18. Spring Cloud Ribbon Client
  19. 利用irc服务器做物联网数据转发 c# winform程序
  20. VS2013新建web项目时出错,系统找不到指定文件

热门文章

  1. webform中Repeater中调用后台方法
  2. 各公有云1核1G的云主机跑分对比
  3. 深度实战玩转算法, Java语言7个经典应用诠释算法精髓
  4. 容器编排系统K8s之访问控制--RBAC授权
  5. yum被系统升级锁定
  6. 基于Let's Encrypt生成免费证书-支持多域名泛域名证书
  7. mysql基础之double,float长度标度定义
  8. git分支的创建与分支之间合并的底层原理
  9. LInux学习笔记之常用命令
  10. 数据库1 --- > 数据库概念、安装、卸载