Class SocketClient
- All Implemented Interfaces:
Proxy
GSocketClient
is a lightweight high-level utility class for connecting to
a network host using a connection oriented socket type.
You create a GSocketClient
object, set any options you want, and then
call a sync or async connect operation, which returns a
SocketConnection
subclass on success.
The type of the SocketConnection
object returned depends on the
type of the underlying socket that is in use. For instance, for a TCP/IP
connection it will be a TcpConnection
.
As GSocketClient
is a lightweight object, you don't need to cache it. You
can just create a new one any time you need one.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
SocketClient.Builder<B extends SocketClient.Builder<B>>
Inner class implementing a builder pattern to construct a GObject with properties.static interface
Functional interface declaration of theEventCallback
callback.static class
Nested classes/interfaces inherited from class org.gnome.gobject.GObject
GObject.NotifyCallback, GObject.ObjectClass
-
Constructor Summary
ConstructorDescriptionCreates a newGSocketClient
with the default options.SocketClient
(MemorySegment address) Create a SocketClient proxy instance for the provided memory address. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addApplicationProxy
(String protocol) Enable proxy protocols to be handled by the application.protected SocketClient
asParent()
Returns this instance as if it were its parent type.static SocketClient.Builder
<? extends SocketClient.Builder> builder()
ASocketClient.Builder
object constructs aSocketClient
with the specified properties.connect
(SocketConnectable connectable, @Nullable Cancellable cancellable) Tries to resolve theconnectable
and make a network connection to it.void
connectAsync
(SocketConnectable connectable, @Nullable Cancellable cancellable, @Nullable AsyncReadyCallback callback) This is the asynchronous version of g_socket_client_connect().connectFinish
(AsyncResult result) Finishes an async connect operation.connectToHost
(String hostAndPort, short defaultPort, @Nullable Cancellable cancellable) This is a helper function for g_socket_client_connect().void
connectToHostAsync
(String hostAndPort, short defaultPort, @Nullable Cancellable cancellable, @Nullable AsyncReadyCallback callback) This is the asynchronous version of g_socket_client_connect_to_host().connectToHostFinish
(AsyncResult result) Finishes an async connect operation.connectToService
(String domain, String service, @Nullable Cancellable cancellable) Attempts to create a TCP connection to a service.void
connectToServiceAsync
(String domain, String service, @Nullable Cancellable cancellable, @Nullable AsyncReadyCallback callback) This is the asynchronous version of g_socket_client_connect_to_service().connectToServiceFinish
(AsyncResult result) Finishes an async connect operation.connectToUri
(String uri, short defaultPort, @Nullable Cancellable cancellable) This is a helper function for g_socket_client_connect().void
connectToUriAsync
(String uri, short defaultPort, @Nullable Cancellable cancellable, @Nullable AsyncReadyCallback callback) This is the asynchronous version of g_socket_client_connect_to_uri().connectToUriFinish
(AsyncResult result) Finishes an async connect operation.void
emitEvent
(SocketClientEvent event, SocketConnectable connectable, @Nullable IOStream connection) Emits the "event" signal.protected void
event
(SocketClientEvent event, SocketConnectable connectable, IOStream connection) boolean
Gets the proxy enable state; see g_socket_client_set_enable_proxy()Gets the socket family of the socket client.Gets the local address of the socket client.static MemoryLayout
The memory layout of the native struct.Gets the protocol name type of the socket client.Gets theGProxyResolver
being used by this SocketClient.Gets the socket type of the socket client.int
Gets the I/O timeout time for sockets created by this SocketClient.boolean
getTls()
Gets whether this SocketClient creates TLS connections.Deprecated.Do not attempt to ignore validation errors.static Type
getType()
Get the GType of the SocketClient classonEvent
(SocketClient.EventCallback handler) Emitted whenclient
's activity onconnectable
changes state.void
setEnableProxy
(boolean enable) Sets whether or not this SocketClient attempts to make connections via a proxy server.void
setFamily
(SocketFamily family) Sets the socket family of the socket client.void
setLocalAddress
(@Nullable SocketAddress address) Sets the local address of the socket client.void
setProtocol
(SocketProtocol protocol) Sets the protocol of the socket client.void
setProxyResolver
(@Nullable ProxyResolver proxyResolver) Overrides theGProxyResolver
used by this SocketClient.void
setSocketType
(SocketType type) Sets the socket type of the socket client.void
setTimeout
(int timeout) Sets the I/O timeout for sockets created by this SocketClient.void
setTls
(boolean tls) Sets whether this SocketClient creates TLS (aka SSL) connections.void
Deprecated.Do not attempt to ignore validation errors.void
setTlsValidationFlags
(TlsCertificateFlags... flags) Deprecated.Do not attempt to ignore validation errors.Methods inherited from class org.gnome.gobject.GObject
addToggleRef, addWeakPointer, bindProperty, bindProperty, bindProperty, bindPropertyFull, bindPropertyFull, bindPropertyWithClosures, bindPropertyWithClosures, compatControl, connect, connect, connect, constructed, disconnect, dispatchPropertiesChanged, dispose, dupData, dupQdata, emit, emitNotify, finalize_, forceFloating, freezeNotify, get, getData, getProperty, getProperty, getProperty, getQdata, getv, interfaceFindProperty, interfaceInstallProperty, interfaceListProperties, isFloating, newInstance, newInstance, newInstance, newInstance, newv, notify_, notify_, notifyByPspec, onNotify, ref, refSink, removeToggleRef, removeWeakPointer, replaceData, replaceQdata, runDispose, set, setData, setDataFull, setProperty, setProperty, setProperty, setQdata, setQdataFull, setv, stealData, stealQdata, takeRef, thawNotify, unref, watchClosure, weakRef, weakUnref, withProperties
Methods inherited from class org.gnome.gobject.TypeInstance
callParent, callParent, getPrivate, readGClass, writeGClass
Methods inherited from class io.github.jwharm.javagi.base.ProxyInstance
equals, handle, hashCode
-
Constructor Details
-
SocketClient
Create a SocketClient proxy instance for the provided memory address.- Parameters:
address
- the memory address of the native object
-
SocketClient
public SocketClient()Creates a newGSocketClient
with the default options.
-
-
Method Details
-
getType
-
getMemoryLayout
The memory layout of the native struct.- Returns:
- the memory layout
-
asParent
Returns this instance as if it were its parent type. This is mostly synonymous to the Javasuper
keyword, but will set the native typeclass function pointers to the parent type. When overriding a native virtual method in Java, "chaining up" withsuper.methodName()
doesn't work, because it invokes the overridden function pointer again. To chain up, callasParent().methodName()
. This will call the native function pointer of this virtual method in the typeclass of the parent type. -
addApplicationProxy
Enable proxy protocols to be handled by the application. When the indicated proxy protocol is returned by theGProxyResolver
,GSocketClient
will consider this protocol as supported but will not try to find aGProxy
instance to handle handshaking. The application must check for this case by calling g_socket_connection_get_remote_address() on the returnedGSocketConnection
, and seeing if it's aGProxyAddress
of the appropriate type, to determine whether or not it needs to handle the proxy handshaking itself.This should be used for proxy protocols that are dialects of another protocol such as HTTP proxy. It also allows cohabitation of proxy protocols that are reused between protocols. A good example is HTTP. It can be used to proxy HTTP, FTP and Gopher and can also be use as generic socket proxy through the HTTP CONNECT method.
When the proxy is detected as being an application proxy, TLS handshake will be skipped. This is required to let the application do the proxy specific handshake.
- Parameters:
protocol
- The proxy protocol
-
connect
public SocketConnection connect(SocketConnectable connectable, @Nullable @Nullable Cancellable cancellable) throws GErrorException Tries to resolve theconnectable
and make a network connection to it.Upon a successful connection, a new
GSocketConnection
is constructed and returned. The caller owns this new object and must drop their reference to it when finished with it.The type of the
GSocketConnection
object returned depends on the type of the underlying socket that is used. For instance, for a TCP/IP connection it will be aGTcpConnection
.The socket created will be the same family as the address that the
connectable
resolves to, unless family is set with g_socket_client_set_family() or indirectly via g_socket_client_set_local_address(). The socket type defaults toSocketType.STREAM
but can be set with g_socket_client_set_socket_type().If a local address is specified with g_socket_client_set_local_address() the socket will be bound to this address before connecting.
- Parameters:
connectable
- aGSocketConnectable
specifying the remote address.cancellable
- optionalGCancellable
object,null
to ignore.- Returns:
- a
GSocketConnection
on success,null
on error. - Throws:
GErrorException
- seeGError
-
connectAsync
public void connectAsync(SocketConnectable connectable, @Nullable @Nullable Cancellable cancellable, @Nullable @Nullable AsyncReadyCallback callback) This is the asynchronous version of g_socket_client_connect().You may wish to prefer the asynchronous version even in synchronous command line programs because, since 2.60, it implements RFC 8305 "Happy Eyeballs" recommendations to work around long connection timeouts in networks where IPv6 is broken by performing an IPv4 connection simultaneously without waiting for IPv6 to time out, which is not supported by the synchronous call. (This is not an API guarantee, and may change in the future.)
When the operation is finished
callback
will be called. You can then call g_socket_client_connect_finish() to get the result of the operation.- Parameters:
connectable
- aGSocketConnectable
specifying the remote address.cancellable
- aGCancellable
, ornull
callback
- aGAsyncReadyCallback
-
connectFinish
Finishes an async connect operation. See g_socket_client_connect_async()- Parameters:
result
- aGAsyncResult
.- Returns:
- a
GSocketConnection
on success,null
on error. - Throws:
GErrorException
- seeGError
-
connectToHost
public SocketConnection connectToHost(String hostAndPort, short defaultPort, @Nullable @Nullable Cancellable cancellable) throws GErrorException This is a helper function for g_socket_client_connect().Attempts to create a TCP connection to the named host.
hostAndPort
may be in any of a number of recognized formats; an IPv6 address, an IPv4 address, or a domain name (in which case a DNS lookup is performed). Quoting with [] is supported for all address types. A port override may be specified in the usual way with a colon. Ports may be given as decimal numbers or symbolic names (in which case an /etc/services lookup is performed).If no port override is given in
hostAndPort
thendefaultPort
will be used as the port number to connect to.In general,
hostAndPort
is expected to be provided by the user (allowing them to give the hostname, and a port override if necessary) anddefaultPort
is expected to be provided by the application.In the case that an IP address is given, a single connection attempt is made. In the case that a name is given, multiple connection attempts may be made, in turn and according to the number of address records in DNS, until a connection succeeds.
Upon a successful connection, a new
GSocketConnection
is constructed and returned. The caller owns this new object and must drop their reference to it when finished with it.In the event of any failure (DNS error, service not found, no hosts connectable)
null
is returned anderror
(if non-null
) is set accordingly.- Parameters:
hostAndPort
- the name and optionally port of the host to connect todefaultPort
- the default port to connect tocancellable
- aGCancellable
, ornull
- Returns:
- a
GSocketConnection
on success,null
on error. - Throws:
GErrorException
- seeGError
-
connectToHostAsync
public void connectToHostAsync(String hostAndPort, short defaultPort, @Nullable @Nullable Cancellable cancellable, @Nullable @Nullable AsyncReadyCallback callback) This is the asynchronous version of g_socket_client_connect_to_host().When the operation is finished
callback
will be called. You can then call g_socket_client_connect_to_host_finish() to get the result of the operation.- Parameters:
hostAndPort
- the name and optionally the port of the host to connect todefaultPort
- the default port to connect tocancellable
- aGCancellable
, ornull
callback
- aGAsyncReadyCallback
-
connectToHostFinish
Finishes an async connect operation. See g_socket_client_connect_to_host_async()- Parameters:
result
- aGAsyncResult
.- Returns:
- a
GSocketConnection
on success,null
on error. - Throws:
GErrorException
- seeGError
-
connectToService
public SocketConnection connectToService(String domain, String service, @Nullable @Nullable Cancellable cancellable) throws GErrorException Attempts to create a TCP connection to a service.This call looks up the SRV record for
service
atdomain
for the "tcp" protocol. It then attempts to connect, in turn, to each of the hosts providing the service until either a connection succeeds or there are no hosts remaining.Upon a successful connection, a new
GSocketConnection
is constructed and returned. The caller owns this new object and must drop their reference to it when finished with it.In the event of any failure (DNS error, service not found, no hosts connectable)
null
is returned anderror
(if non-null
) is set accordingly.- Parameters:
domain
- a domain nameservice
- the name of the service to connect tocancellable
- aGCancellable
, ornull
- Returns:
- a
GSocketConnection
if successful, ornull
on error - Throws:
GErrorException
- seeGError
-
connectToServiceAsync
public void connectToServiceAsync(String domain, String service, @Nullable @Nullable Cancellable cancellable, @Nullable @Nullable AsyncReadyCallback callback) This is the asynchronous version of g_socket_client_connect_to_service().- Parameters:
domain
- a domain nameservice
- the name of the service to connect tocancellable
- aGCancellable
, ornull
callback
- aGAsyncReadyCallback
-
connectToServiceFinish
Finishes an async connect operation. See g_socket_client_connect_to_service_async()- Parameters:
result
- aGAsyncResult
.- Returns:
- a
GSocketConnection
on success,null
on error. - Throws:
GErrorException
- seeGError
-
connectToUri
public SocketConnection connectToUri(String uri, short defaultPort, @Nullable @Nullable Cancellable cancellable) throws GErrorException This is a helper function for g_socket_client_connect().Attempts to create a TCP connection with a network URI.
uri
may be any valid URI containing an "authority" (hostname/port) component. If a port is not specified in the URI,defaultPort
will be used. TLS will be negotiated ifGSocketClient
:tls istrue
. (GSocketClient
does not know to automatically assume TLS for certain URI schemes.)Using this rather than g_socket_client_connect() or g_socket_client_connect_to_host() allows
GSocketClient
to determine when to use application-specific proxy protocols.Upon a successful connection, a new
GSocketConnection
is constructed and returned. The caller owns this new object and must drop their reference to it when finished with it.In the event of any failure (DNS error, service not found, no hosts connectable)
null
is returned anderror
(if non-null
) is set accordingly.- Parameters:
uri
- A network URIdefaultPort
- the default port to connect tocancellable
- aGCancellable
, ornull
- Returns:
- a
GSocketConnection
on success,null
on error. - Throws:
GErrorException
- seeGError
-
connectToUriAsync
public void connectToUriAsync(String uri, short defaultPort, @Nullable @Nullable Cancellable cancellable, @Nullable @Nullable AsyncReadyCallback callback) This is the asynchronous version of g_socket_client_connect_to_uri().When the operation is finished
callback
will be called. You can then call g_socket_client_connect_to_uri_finish() to get the result of the operation.- Parameters:
uri
- a network uridefaultPort
- the default port to connect tocancellable
- aGCancellable
, ornull
callback
- aGAsyncReadyCallback
-
connectToUriFinish
Finishes an async connect operation. See g_socket_client_connect_to_uri_async()- Parameters:
result
- aGAsyncResult
.- Returns:
- a
GSocketConnection
on success,null
on error. - Throws:
GErrorException
- seeGError
-
getEnableProxy
public boolean getEnableProxy()Gets the proxy enable state; see g_socket_client_set_enable_proxy()- Returns:
- whether proxying is enabled
-
getFamily
Gets the socket family of the socket client.See g_socket_client_set_family() for details.
- Returns:
- a
GSocketFamily
-
getLocalAddress
Gets the local address of the socket client.See g_socket_client_set_local_address() for details.
- Returns:
- a
GSocketAddress
ornull
. Do not free.
-
getProtocol
Gets the protocol name type of the socket client.See g_socket_client_set_protocol() for details.
- Returns:
- a
GSocketProtocol
-
getProxyResolver
Gets theGProxyResolver
being used by this SocketClient. Normally, this will be the resolver returned by g_proxy_resolver_get_default(), but you can override it with g_socket_client_set_proxy_resolver().- Returns:
- The
GProxyResolver
being used by this SocketClient.
-
getSocketType
Gets the socket type of the socket client.See g_socket_client_set_socket_type() for details.
- Returns:
- a
GSocketFamily
-
getTimeout
public int getTimeout()Gets the I/O timeout time for sockets created by this SocketClient.See g_socket_client_set_timeout() for details.
- Returns:
- the timeout in seconds
-
getTls
public boolean getTls()Gets whether this SocketClient creates TLS connections. See g_socket_client_set_tls() for details.- Returns:
- whether this SocketClient uses TLS
-
getTlsValidationFlags
Deprecated.Do not attempt to ignore validation errors.Gets the TLS validation flags used creating TLS connections via this SocketClient.This function does not work as originally designed and is impossible to use correctly. See
GSocketClient
:tls-validation-flags for more information.- Returns:
- the TLS validation flags
-
setEnableProxy
public void setEnableProxy(boolean enable) Sets whether or not this SocketClient attempts to make connections via a proxy server. When enabled (the default),GSocketClient
will use aGProxyResolver
to determine if a proxy protocol such as SOCKS is needed, and automatically do the necessary proxy negotiation.See also g_socket_client_set_proxy_resolver().
- Parameters:
enable
- whether to enable proxies
-
setFamily
Sets the socket family of the socket client. If this is set to something other thanSocketFamily.INVALID
then the sockets created by this object will be of the specified family.This might be useful for instance if you want to force the local connection to be an ipv4 socket, even though the address might be an ipv6 mapped to ipv4 address.
- Parameters:
family
- aGSocketFamily
-
setLocalAddress
Sets the local address of the socket client. The sockets created by this object will bound to the specified address (if notnull
) before connecting.This is useful if you want to ensure that the local side of the connection is on a specific port, or on a specific interface.
- Parameters:
address
- aGSocketAddress
, ornull
-
setProtocol
Sets the protocol of the socket client. The sockets created by this object will use of the specified protocol.If
protocol
isSocketProtocol.DEFAULT
that means to use the default protocol for the socket family and type.- Parameters:
protocol
- aGSocketProtocol
-
setProxyResolver
Overrides theGProxyResolver
used by this SocketClient. You can call this if you want to use specific proxies, rather than using the system default proxy settings.Note that whether or not the proxy resolver is actually used depends on the setting of
GSocketClient
:enable-proxy, which is not changed by this function (but which istrue
by default)- Parameters:
proxyResolver
- aGProxyResolver
, ornull
for the default.
-
setSocketType
Sets the socket type of the socket client. The sockets created by this object will be of the specified type.It doesn't make sense to specify a type of
SocketType.DATAGRAM
, as GSocketClient is used for connection oriented services.- Parameters:
type
- aGSocketType
-
setTimeout
public void setTimeout(int timeout) Sets the I/O timeout for sockets created by this SocketClient.timeout
is a time in seconds, or 0 for no timeout (the default).The timeout value affects the initial connection attempt as well, so setting this may cause calls to g_socket_client_connect(), etc, to fail with
IOErrorEnum.TIMED_OUT
.- Parameters:
timeout
- the timeout
-
setTls
public void setTls(boolean tls) Sets whether this SocketClient creates TLS (aka SSL) connections. Iftls
istrue
, this SocketClient will wrap its connections in aGTlsClientConnection
and perform a TLS handshake when connecting.Note that since
GSocketClient
must return aGSocketConnection
, butGTlsClientConnection
is not aGSocketConnection
, this actually wraps the resultingGTlsClientConnection
in aGTcpWrapperConnection
when returning it. You can use g_tcp_wrapper_connection_get_base_io_stream() on the return value to extract theGTlsClientConnection
.If you need to modify the behavior of the TLS handshake (eg, by setting a client-side certificate to use, or connecting to the
GTlsConnection
::accept-certificate signal), you can connect to this SocketClient'sGSocketClient
::event signal and wait for it to be emitted withSocketClientEvent.TLS_HANDSHAKING
, which will give you a chance to see theGTlsClientConnection
before the handshake starts.- Parameters:
tls
- whether to use TLS
-
setTlsValidationFlags
Deprecated.Do not attempt to ignore validation errors.Sets the TLS validation flags used when creating TLS connections via this SocketClient. The default value isTlsCertificateFlags.VALIDATE_ALL
.This function does not work as originally designed and is impossible to use correctly. See
GSocketClient
:tls-validation-flags for more information.- Parameters:
flags
- the validation flags
-
setTlsValidationFlags
Deprecated.Do not attempt to ignore validation errors.Sets the TLS validation flags used when creating TLS connections via this SocketClient. The default value isTlsCertificateFlags.VALIDATE_ALL
.This function does not work as originally designed and is impossible to use correctly. See
GSocketClient
:tls-validation-flags for more information.- Parameters:
flags
- the validation flags
-
event
-
onEvent
Emitted whenclient
's activity onconnectable
changes state. Among other things, this can be used to provide progress information about a network connection in the UI. The meanings of the differentevent
values are as follows:SocketClientEvent.RESOLVING
:client
is about to look upconnectable
in DNS.connection
will benull
.
SocketClientEvent.RESOLVED
:client
has successfully resolvedconnectable
in DNS.connection
will benull
.
SocketClientEvent.CONNECTING
:client
is about to make a connection to a remote host; either a proxy server or the destination server itself.connection
is theGSocketConnection
, which is not yet connected. Since GLib 2.40, you can access the remote address via g_socket_connection_get_remote_address().
SocketClientEvent.CONNECTED
:client
has successfully connected to a remote host.connection
is the connectedGSocketConnection
.
SocketClientEvent.PROXY_NEGOTIATING
:client
is about to negotiate with a proxy to get it to connect toconnectable
.connection
is theGSocketConnection
to the proxy server.
SocketClientEvent.PROXY_NEGOTIATED
:client
has negotiated a connection toconnectable
through a proxy server.connection
is the stream returned from g_proxy_connect(), which may or may not be aGSocketConnection
.
SocketClientEvent.TLS_HANDSHAKING
:client
is about to begin a TLS handshake.connection
is aGTlsClientConnection
.
SocketClientEvent.TLS_HANDSHAKED
:client
has successfully completed the TLS handshake.connection
is aGTlsClientConnection
.
SocketClientEvent.COMPLETE
:client
has either successfully connected toconnectable
(in which caseconnection
is theGSocketConnection
that it will be returning to the caller) or has failed (in which caseconnection
isnull
and the client is about to return an error).
Each event except
SocketClientEvent.COMPLETE
may be emitted multiple times (or not at all) for a given connectable (in particular, ifclient
ends up attempting to connect to more than one address). However, ifclient
emits theGSocketClient
::event signal at all for a given connectable, then it will always emit it withSocketClientEvent.COMPLETE
when it is done.Note that there may be additional
GSocketClientEvent
values in the future; unrecognizedevent
values should be ignored.- Parameters:
handler
- the signal handler- Returns:
- a signal handler ID to keep track of the signal connection
- See Also:
-
emitEvent
public void emitEvent(SocketClientEvent event, SocketConnectable connectable, @Nullable @Nullable IOStream connection) Emits the "event" signal. SeeonEvent(org.gnome.gio.SocketClient.EventCallback)
. -
builder
ASocketClient.Builder
object constructs aSocketClient
with the specified properties. Use the variousset...()
methods to set properties, and finish construction withSocketClient.Builder.build()
.
-