Files
spencer 26e40aa4b9 fix: Fixed a compilation issue with send_const_string.
`send` now automatically uses `send_const_string` when appropriate.
2026-07-08 15:28:19 -04:00

65 lines
1.3 KiB
Odin

package main
import zmq "../../"
import "core:fmt"
import "core:log"
main :: proc() {
context.logger = log.create_console_logger(.Debug, {})
major, minor, patch := zmq.version()
log.infof(
"zmq echo (libzmq %d.%d.%d) over inproc; type lines, Ctrl-D to quit",
major,
minor,
patch,
)
ctx := zmq.ctx_new()
defer zmq.ctx_term(ctx)
srv, serr := zmq.socket(ctx, .REP)
if serr != nil {
log.panic(zmq.strerror(serr))
}
defer zmq.close(srv)
if err := zmq.bind(srv, "inproc://echo"); err != nil {
log.panic(zmq.strerror(err))
}
cli, cerr := zmq.socket(ctx, .REQ)
if cerr != nil {
log.panicf("err: %v (%d) %s", cerr, cerr, zmq.strerror(cerr))
}
defer zmq.close(cli)
if err := zmq.connect(cli, "inproc://echo"); err != nil {
log.panic(zmq.strerror(err))
}
buf: [255]u8
msg :: "Hello, World"
fmt.printfln("> %s", msg)
if _, err := zmq.send_const(cli, msg); err != nil {
fmt.eprintfln("send: %s", zmq.strerror(err))
return
}
n, rerr := zmq.recv(srv, buf[:])
if rerr != nil {
fmt.eprintfln("rep recv: %s", zmq.strerror(rerr))
return
}
if _, werr := zmq.send(srv, buf[:n]); werr != nil {
fmt.eprintfln("rep send: %v %s", werr, zmq.strerror(werr))
return
}
m, qerr := zmq.recv(cli, buf[:])
if qerr != nil {
fmt.eprintfln("req recv: %s", zmq.strerror(qerr))
return
}
fmt.printfln("< %s", string(buf[:m]))
}