gpt4 book ai didi

sockets - 没有可用的缓冲区空间(tcp.cpp :69) when setting SNDBUF and RCVBUF ZeroMQ, golang,MacOSX

转载 作者:数据小太阳 更新时间:2023-10-29 03:16:05 25 4
gpt4 key购买 nike

我在 MacOSX 上使用 brew 安装了 zeromq: stable 4.1.4,并编写了一个简单的 PUB/SUB 程序来测试 zeromq。但是当我使用标志 --bufsize > 5 运行示例程序时(使用大小 > 5MB 的缓冲区)(去运行 go_zmq_pubsub.go --bufsize=6);它抛出以下异常:

没有可用的缓冲区空间 (tcp.cpp:69)SIGABRT:中止PC=0x7fff9911c286 m=0cgo执行时信号到达

下面是我用来测试zeromq4.x的程序

package main

import (
"fmt"
"flag"
"strconv"
"sync"
log "github.com/Sirupsen/logrus"
zmq "github.com/pebbe/zmq4"
"time"
)

var _ = fmt.Println

func main(){
var port int
var bufsize int
flag.IntVar(&port, "port", 7676, "server's zmq tcp port")
flag.IntVar(&bufsize, "bufsize", 0, "socket kernel buffer size")

flag.Parse();

publisher, err := zmq.NewSocket(zmq.PUB)
if(err != nil) {
log.Fatal(err)
}

//set publisher kernel transmit buffer size
//convert into bytes
if err := publisher.SetSndbuf(bufsize * 1000000); err != nil {
log.Fatal(err)
}

defer publisher.Close()
publisher.Bind("tcp://*:" + strconv.Itoa(port))

//SETUP subscriber
subscriber, err := zmq.NewSocket(zmq.SUB)
if(err != nil) {
log.Fatal(err)
}

//set subscriber kernel receive buffer size
if err := subscriber.SetRcvbuf(bufsize * 1000000); err != nil {
log.Fatal(err)
}

defer subscriber.Close()
subscriber.Connect("tcp://127.0.0.1:" + strconv.Itoa(port))
subscriber.SetSubscribe("")

var wg sync.WaitGroup
wg.Add(2)

idx := 0

go func(wg *sync.WaitGroup) {
//start streaming messages
ticker := time.NewTicker(1 * time.Second)
go func() {
for {
select {
case <-ticker.C:
_, err = publisher.Send("PKG:"+strconv.Itoa(idx), 0)

idx++;

if(err != nil) {
log.Error(err)
}
}
}
}()
}(&wg)


//receiver
go func(wg *sync.WaitGroup) {
go func(){
for {
payload, err := subscriber.Recv(0)
_ = payload

if err != nil {
log.Error(err)
break
}

//now sending into worker pool
log.Info("RECEIVE:" + payload)
}
}()
}(&wg)

wg.Wait()
}

在使用从源代码构建的 lib-zeromq 的 Centos7 上,上述代码可以正常运行。

不确定是由于 libzeromq 还是操作系统本身。

谢谢。

最佳答案

> 5MB 的缓冲区大小毫无意义。超出相关链接的带宽延迟产品的任何内容都是浪费空间。

缓和您的要求。

关于sockets - 没有可用的缓冲区空间(tcp.cpp :69) when setting SNDBUF and RCVBUF ZeroMQ, golang,MacOSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35286317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com