public virtual uint send_message (Message msg)

Synchronously send msg.

This call will not return until the transfer is finished successfully or there is an unrecoverable error.

Unlike with queue_message, msg is not freed upon return.

(Note that if you call this method on a SessionAsync, it will still use asynchronous I/O internally, running the glib main loop to process the message, which may also cause other events to be processed.)

Contrast this method with send, which also synchronously sends a message, but returns before reading the response body, and allows you to read the response via a InputStream.

Example: Basic soup request, sync:

public static int main (string[] args) {
// Create a session:
Soup.Session session = new Soup.Session ();

// Add a logger:
Soup.Logger logger = new Soup.Logger (Soup.LoggerLogLevel.MINIMAL, -1);
session.add_feature (logger);

// Send a request:
Soup.Message msg = new Soup.Message ("GET", "");
session.send_message (msg);

// Process the result:
msg.response_headers.foreach ((name, val) => {
stdout.printf ("%s = %s\n", name, val);

stdout.printf ("Status Code: %u\n", msg.status_code);
stdout.printf ("Message length: %lld\n", msg.response_body.length);
stdout.printf ("Data: \n%s\n", (string);
return 0;

valac --pkg libsoup-2.4 basic-soup-request-get-sync.vala



a Session


the message to send


the HTTP status code of the response