<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/recent-improvements-in-libnice-iviqmeegs" -->

---
title: Recent improvements in libnice | daily.dev
description: libnice 0.1.8 introduces several major improvements: a GIOStream implementation via nice_agent_get_io_stream(), scatter-gather I/O support through a...
canonical: https://daily.dev/posts/recent-improvements-in-libnice-iviqmeegs
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Recent improvements in libnice | daily.dev
og:description: libnice 0.1.8 introduces several major improvements: a GIOStream implementation via nice_agent_get_io_stream(), scatter-gather I/O support through a...
og:url: https://daily.dev/posts/recent-improvements-in-libnice-iviqmeegs
og:image: https://api.daily.dev/og/posts/iViqmEegS.png
og:image:alt: Recent improvements in libnice
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Recent improvements in libnice

**[Collabora Blog](https://daily.dev/sources/collabora)** · 6 min read · 0 upvotes · 0 comments

## Summary

libnice 0.1.8 introduces several major improvements: a GIOStream implementation via nice_agent_get_io_stream(), scatter-gather I/O support through a recvmmsg()-like API (nice_agent_recv_messages/nice_agent_send_messages_nonblocking), non-blocking variants of I/O functions, per-stream ICE restart support via nice_agent_restart_stream(), and FIN/ACK support in the pseudo-TCP implementation. The pseudo-TCP layer also gained half-duplex close support and TLS layering via GTlsConnection. GLib received networking fixes, API additions, and documentation improvements alongside these changes.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.collabora.com/about-us/blog/2014/10/31/recent-improvements-in-libnice>

## Questions this post answers

### What new I/O API was added to libnice for scatter-gather receive operations?

libnice 0.1.8 added nice_agent_recv_messages(), a recvmmsg()-like scatter-gather API that lets callers supply an array of NiceInputMessage structs, each backed by multiple GInputVector buffers. This avoids the need to allocate a single flat buffer and manually split header from payload, and pairs with nice_agent_send_messages_nonblocking() on the send side for zero-copy scatter-gather writes.

_Developers building peer-to-peer networking stacks track libnice API changes on daily.dev._

### Does libnice support non-blocking I/O without attaching to a GMainContext callback?

Yes, libnice 0.1.8 added non-blocking variants of its I/O functions. Previously, receiving packets required attaching a stream to a GMainContext and handling delivery via a callback. The new API exposes a GIOStream via nice_agent_get_io_stream(), which implements GPollableInputStream, allowing non-blocking reads in a polling loop without the callback-based setup.

_NAT traversal and WebRTC developers following libnice evolution keep up on daily.dev._

### Does libnice's pseudo-TCP implementation support FIN/ACK connection teardown?

libnice 0.1.8 added FIN/ACK support to its pseudo-TCP implementation. The original code was based on Google's libjingle pseudo-TCP and handled basic TCP mechanics over UDP but left connection closing to higher-level protocols. The update adds proper FIN/ACK handshake handling, half-duplex close support, and the ability to layer TLS over pseudo-TCP via GTlsConnection.

_Developers layering reliable streams over UDP in open source projects find related updates on daily.dev._

## Similar posts on daily.dev

- [GNUnet 0.27 Released For Those With "Some Reasonable Pain Tolerance"](https://daily.dev/posts/gnunet-0-27-released-for-those-with-some-reasonable-pain-tolerance--jevdqxowl) · Phoronix · 0 upvotes · 0 comments
- [nanomsg-NG](https://daily.dev/posts/nanomsg-ng-2hdxgfzyz) · Ruby Flow · 0 upvotes · 0 comments
- [New And Upcoming IRCv3 Features](https://daily.dev/posts/new-and-upcoming-ircv3-features-fz4e4ctuo) · Lobsters · 0 upvotes · 0 comments
- [Erlang socket layer throughput improvements](https://daily.dev/posts/erlang-socket-layer-throughput-improvements-k54xnpxbv) · Erlang Forums · 0 upvotes · 0 comments

---

Tags: [#networking](https://daily.dev/tags/networking)

[View this post on daily.dev](https://daily.dev/posts/recent-improvements-in-libnice-iviqmeegs)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Recent improvements in libnice","url":"https://daily.dev/posts/recent-improvements-in-libnice-iviqmeegs","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/recent-improvements-in-libnice-iviqmeegs"},"datePublished":"2026-08-11T08:55:45.026Z","dateModified":"2026-08-11T09:40:17.010Z","description":"libnice 0.1.8 introduces several major improvements: a GIOStream implementation via nice_agent_get_io_stream(), scatter-gather I/O support through a...","image":"https://media.daily.dev/image/upload/s--OHB84bZF--/f_auto/v1722860399/public/Placeholder%2010","thumbnailUrl":"https://media.daily.dev/image/upload/s--OHB84bZF--/f_auto/v1722860399/public/Placeholder%2010","isAccessibleForFree":true,"articleSection":"Collabora Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Collabora Blog","logo":"https://media.daily.dev/image/upload/s--ZGZ0FjqS--/f_auto,q_auto/v1786438306/logos/collabora?_a=BAMAMicg0","url":"https://daily.dev/sources/collabora"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/recent-improvements-in-libnice-iviqmeegs","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"networking","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Collabora Blog","item":"https://daily.dev/sources/collabora"},{"@type":"ListItem","position":3,"name":"Recent improvements in libnice"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/recent-improvements-in-libnice-iviqmeegs#faq","mainEntity":[{"@type":"Question","name":"What new I/O API was added to libnice for scatter-gather receive operations?","acceptedAnswer":{"@type":"Answer","text":"libnice 0.1.8 added nice_agent_recv_messages(), a recvmmsg()-like scatter-gather API that lets callers supply an array of NiceInputMessage structs, each backed by multiple GInputVector buffers. This avoids the need to allocate a single flat buffer and manually split header from payload, and pairs with nice_agent_send_messages_nonblocking() on the send side for zero-copy scatter-gather writes. Developers building peer-to-peer networking stacks track libnice API changes on daily.dev."}},{"@type":"Question","name":"Does libnice support non-blocking I/O without attaching to a GMainContext callback?","acceptedAnswer":{"@type":"Answer","text":"Yes, libnice 0.1.8 added non-blocking variants of its I/O functions. Previously, receiving packets required attaching a stream to a GMainContext and handling delivery via a callback. The new API exposes a GIOStream via nice_agent_get_io_stream(), which implements GPollableInputStream, allowing non-blocking reads in a polling loop without the callback-based setup. NAT traversal and WebRTC developers following libnice evolution keep up on daily.dev."}},{"@type":"Question","name":"Does libnice's pseudo-TCP implementation support FIN/ACK connection teardown?","acceptedAnswer":{"@type":"Answer","text":"libnice 0.1.8 added FIN/ACK support to its pseudo-TCP implementation. The original code was based on Google's libjingle pseudo-TCP and handled basic TCP mechanics over UDP but left connection closing to higher-level protocols. The update adds proper FIN/ACK handshake handling, half-duplex close support, and the ability to layer TLS over pseudo-TCP via GTlsConnection. Developers layering reliable streams over UDP in open source projects find related updates on daily.dev."}}]}
```

