[ Version ( since = "2.48" ) ]
public bool listen_all (uint port, ServerListenOptions options) throws Error

This attempts to set up this to listen for connections on all interfaces on the system.

(That is, it listens on the addresses and/or :, depending on whether options includes IPV4_ONLY, IPV6_ONLY, or neither.) If port is specified, this will listen on that port. If it is 0, this will find an unused port to listen on. (In that case, you can use get_uris to find out what port it ended up choosing.)

See listen for more details.

Example: Simple server, async:

public class NoodleSoupServer : Soup.Server {
private int access_counter = 0;

public NoodleSoupServer () {
assert (this != null);

// Links:
// http://localhost:8088/*
this.add_handler (null, default_handler);

private static void default_handler (Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) {
unowned NoodleSoupServer self = server as NoodleSoupServer;

uint id = self.access_counter++;
print ("Default handler start (%u)\n", id);

// Simulate asynchronous input / time consuming operations:
// See GLib.IOSchedulerJob for time consuming operations
Timeout.add_seconds (0, () => {
string html_head = "<head><title>Index</title></head>";
string html_body = "<body><h1>Index:</h1></body>";
msg.set_response ("text/html", Soup.MemoryUse.COPY, "<html>%s%s</html>".printf (html_head, html_body).data);

// Resumes HTTP I/O on msg:
self.unpause_message (msg);
print ("Default handler end (%u)\n", id);
return false;
}, Priority.DEFAULT);

// Pauses HTTP I/O on msg:
self.pause_message (msg);

public static int main (string[] args) {
try {
int port = 8088;

MainLoop loop = new MainLoop ();

NoodleSoupServer server = new NoodleSoupServer ();
server.listen_all (port, 0); ();
} catch (Error e) {
print ("Error: %s\n", e.message);
return 0;

valac --pkg libsoup-2.4 simple-server-async-new.vala



a Server


the port to listen on, or 0


listening options for this server


true on success, false if port could not be bound or any other error occurred (in which case error will be set).