nginx - .sock文件是做什么用的

【字号: 日期:2022-07-30浏览:51作者:雯心

问题描述

求问.sock文件是做什么用的,完全木有概念。。。

问题解答

回答1:

就是以 .sock 为后缀的文件而已。UNIX 系统不以后缀区分文件类型,但为了方便,通常使用后缀来标识一下。.sock 文件极有可能是 UNIX 域套接字(UNIX domain socket),即通过文件系统(而非网络地址)进行寻址和访问的套接字。参见 man 手册 unix(7)(命令:man 7 unix)。

回答2:

Unix domain sockethttp://en.wikipedia.org/wiki/Unix_domain_socket

相对的是tcp sockthttp://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html

例子(golang的):出自 这

server.go

package mainimport 'net'func echoServer(c net.Conn) { for {buf := make([]byte, 512)nr, err := c.Read(buf)if err != nil { return}data := buf[0:nr]println('Server got:', string(data))_, err = c.Write(data)if err != nil { panic('Write: ' + err.Error())} }}func main() { l, err := net.Listen('unix', '/tmp/echo.sock') if err != nil {println('listen error', err.Error())return } for {fd, err := l.Accept()if err != nil { println('accept error', err.Error()) return}go echoServer(fd) }}

client.go

package mainimport ( 'io' 'net' 'time')func reader(r io.Reader) { buf := make([]byte, 1024) for {n, err := r.Read(buf[:])if err != nil { return}println('Client got:', string(buf[0:n])) }}func main() { c, err := net.Dial('unix', '/tmp/echo.sock') if err != nil {panic(err.Error()) } defer c.Close() go reader(c) for {_, err := c.Write([]byte('hi....'))if err != nil { println(err.Error()) break}time.Sleep(1e9) }}

跑server的时,会建议/tmp/echo.sock文件

相关文章: