[ 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 0.0.0.0 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);
loop.run ();
} catch (Error e) {
print ("Error: %s\n", e.message);
}
return 0;
}
}
valac --pkg libsoup-2.4 simple-server-async-new.vala
this |
a Server |
port |
the port to listen on, or 0 |
options |
listening options for this server |
|