zhangmeng
2019-08-26 3bd1f29975c0eaa6af8c99776b099faafbbfc250
提交 | 用户 | age
3bd1f2 1 // Copyright 2016 Tom Thorogood. All rights reserved.
Z 2 // Use of this source code is governed by a
3 // Modified BSD License license that can be found in
4 // the LICENSE file.
5
6 package net
7
8 import (
9     "net"
10     "os"
11     "sync"
12
13     "github.com/tmthrgd/shm-go"
14 )
15
16 type Listener struct {
17     rw   *shm.ReadWriteCloser
18     name string
19
20     mut sync.Mutex
21 }
22
23 func Listen(name string, perm os.FileMode, blockCount, blockSize int) (*Listener, error) {
24     rw, err := shm.CreateDuplex(name, perm, blockCount, blockSize)
25     if err != nil {
26         return nil, err
27     }
28
29     return &Listener{
30         rw:   rw,
31         name: name,
32     }, nil
33 }
34
35 func NewListener(rw *shm.ReadWriteCloser, name string) *Listener {
36     return &Listener{
37         rw:   rw,
38         name: name,
39     }
40 }
41
42 func (l *Listener) Accept() (net.Conn, error) {
43     l.mut.Lock()
44     return &Conn{l.rw, l.name, &l.mut}, nil
45 }
46
47 func (l *Listener) Close() error {
48     return l.rw.Close()
49 }
50
51 func (l *Listener) Addr() net.Addr {
52     return addr(l.name)
53 }