---
name: "dnsjit.core.channel"
section: "3"
platform: "linux"
package: "dnsjit"
version: "1.5.0-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/dnsjit.core.channel"
---

# dnsjit.core.channel(3)

Send data to another thread

## NAME

dnsjit.core.channel - Send data to another thread

## SYNOPSIS

  local chan = require("dnsjit.core.channel").new()\
   local thr = require("dnsjit.core.thread").new()\
   thr:start(function(thr)\
       local chan = thr:pop()\
       local obj = chan:get()\
       ...\
   end)\
   thr:push(chan)\
   chan:put(...)\
   chan:close()\
   thr:stop()

## DESCRIPTION

A channel can be used to send data to another thread, this is done by putting a pointer to the data into a wait-free and lock-free ring buffer (concurrency kit). The channel uses the single producer, single consumer model (SPSC) so there can only be one writer and one reader.

### Attributes

- int closed

  Is 1 if the channel has been closed.

### Functions

- **Channel.new**(capacity)

  Create a new Channel, use the optional *capacity* to specify the capacity of the channel (buffer). Capacity must be a power-of-two greater than or equal to 4. Default capacity is 2048.

- **Channel:log**()

  Return the Log object to control logging of this instance or module.

- **Channel:share**()

  Return information to use when sharing this object between threads.

- **Channel:put**(obj)

  Put an object into the channel, if the channel is full then it will stall and wait until space becomes available. Object may be nil.

- **Channel:put**(obj)

  Try and put an object into the channel. Returns 0 on success.

- **Channel:get**()

  Get an object from the channel, if the channel is empty it will wait until an object is available. Returns nil if the channel is closed or if a nil object was explicitly put into the channel.

- **Channel:try\_get**()

  Try and get an object from the channel. Returns nil if there was no objects to get.

- **Channel:size**()

  Return number of enqueued objects.

- **Channel:full**()

  Returns true when channel is full.

- **Channel:close**()

  Close the channel.

- **Channel:receive**()

  Return the C functions and context for receiving objects.

- **Channel:receiver**(o)

  Set the receiver to pass objects to. NOTE; The channel keeps no reference of the receiver, it needs to live as long as the channel does.

- **Channel:run**()

  Retrieve all objects from the channel and send it to the receiver.

## SEE ALSO

[**dnsjit.core.thread**(3)](/dnsjit.core.thread/3.md)

## AUTHORS and CONTRIBUTORS

Jerry Lundström (DNS-OARC), Tomáš Křížek (CZ.NIC), Petr Špaček (ISC)

Maintained by DNS-OARC

*https://www.dns-oarc.net/*

## BUGS

For issues and feature requests please use:

*https://github.com/DNS-OARC/dnsjit/issues*

For question and help please use:

*admin@dns-oarc.net*
