Interface PollableOutputStream
- All Superinterfaces:
Proxy
- All Known Implementing Classes:
ConverterOutputStream
,MemoryOutputStream
,PollableOutputStream.PollableOutputStreamImpl
,UnixOutputStream
GPollableOutputStream
is implemented by OutputStream
s that
can be polled for readiness to write. This can be used when
interfacing with a non-GIO API that expects
UNIX-file-descriptor-style asynchronous I/O rather than GIO-style.
Some classes may implement GPollableOutputStream
but have only certain
instances of that class be pollable. If canPoll()
returns false, then the behavior of other GPollableOutputStream
methods is
undefined.
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic class
The PollableOutputStreamImpl type represents a native instance of the PollableOutputStream interface.static class
The interface for pollable output streams. -
Method Summary
Modifier and TypeMethodDescriptiondefault boolean
canPoll()
Checks if this PollableOutputStream is actually pollable.default Source
createSource
(@Nullable Cancellable cancellable) Creates aGSource
that triggers when this PollableOutputStream can be written, orcancellable
is triggered or an error occurs.static Type
getType()
Get the GType of the PollableOutputStream classdefault boolean
Checks if this PollableOutputStream can be written.default long
writeNonblocking
(byte[] buffer, @Nullable Cancellable cancellable) Attempts to write up tocount
bytes frombuffer
to this PollableOutputStream, as with g_output_stream_write().default PollableReturn
writevNonblocking
(OutputVector[] vectors, @Nullable Out<Long> bytesWritten, @Nullable Cancellable cancellable) Attempts to write the bytes contained in thenVectors
vectors
to this PollableOutputStream, as with g_output_stream_writev().
-
Method Details
-
getType
-
canPoll
default boolean canPoll()Checks if this PollableOutputStream is actually pollable. Some classes may implementGPollableOutputStream
but have only certain instances of that class be pollable. If this method returnsfalse
, then the behavior of otherGPollableOutputStream
methods is undefined.For any given stream, the value returned by this method is constant; a stream cannot switch from pollable to non-pollable or vice versa.
- Returns:
true
if this PollableOutputStream is pollable,false
if not.
-
createSource
Creates aGSource
that triggers when this PollableOutputStream can be written, orcancellable
is triggered or an error occurs. The callback on the source is of theGPollableSourceFunc
type.As with g_pollable_output_stream_is_writable(), it is possible that the stream may not actually be writable even after the source triggers, so you should use g_pollable_output_stream_write_nonblocking() rather than g_output_stream_write() from the callback.
The behaviour of this method is undefined if g_pollable_output_stream_can_poll() returns
false
for this PollableOutputStream.- Parameters:
cancellable
- aGCancellable
, ornull
- Returns:
- a new
GSource
-
isWritable
default boolean isWritable()Checks if this PollableOutputStream can be written.Note that some stream types may not be able to implement this 100% reliably, and it is possible that a call to g_output_stream_write() after this returns
true
would still block. To guarantee non-blocking behavior, you should always use g_pollable_output_stream_write_nonblocking(), which will return aIOErrorEnum.WOULD_BLOCK
error rather than blocking.The behaviour of this method is undefined if g_pollable_output_stream_can_poll() returns
false
for this PollableOutputStream.- Returns:
true
if this PollableOutputStream is writable,false
if not. If an error has occurred on this PollableOutputStream, this will result in g_pollable_output_stream_is_writable() returningtrue
, and the next attempt to write will return the error.
-
writeNonblocking
default long writeNonblocking(byte[] buffer, @Nullable @Nullable Cancellable cancellable) throws GErrorException Attempts to write up tocount
bytes frombuffer
to this PollableOutputStream, as with g_output_stream_write(). If this PollableOutputStream is not currently writable, this will immediately returnIOErrorEnum.WOULD_BLOCK
, and you can use g_pollable_output_stream_create_source() to create aGSource
that will be triggered when this PollableOutputStream is writable.Note that since this method never blocks, you cannot actually use
cancellable
to cancel it. However, it will return an error ifcancellable
has already been cancelled when you call, which may happen if you call this method after a source triggers due to having been cancelled.Also note that if
IOErrorEnum.WOULD_BLOCK
is returned some underlying transports like D/TLS require that you re-send the samebuffer
andcount
in the next write call.The behaviour of this method is undefined if g_pollable_output_stream_can_poll() returns
false
for this PollableOutputStream.- Parameters:
buffer
- a buffer to write data fromcancellable
- aGCancellable
, ornull
- Returns:
- the number of bytes written, or -1 on error (including
IOErrorEnum.WOULD_BLOCK
). - Throws:
GErrorException
- seeGError
-
writevNonblocking
default PollableReturn writevNonblocking(OutputVector[] vectors, @Nullable @Nullable Out<Long> bytesWritten, @Nullable @Nullable Cancellable cancellable) throws GErrorException Attempts to write the bytes contained in thenVectors
vectors
to this PollableOutputStream, as with g_output_stream_writev(). If this PollableOutputStream is not currently writable, this will immediately return %GPOLLABLERETURNWOULDBLOCK
, and you can use g_pollable_output_stream_create_source() to create aGSource
that will be triggered when this PollableOutputStream is writable.error
will not be set in that case.Note that since this method never blocks, you cannot actually use
cancellable
to cancel it. However, it will return an error ifcancellable
has already been cancelled when you call, which may happen if you call this method after a source triggers due to having been cancelled.Also note that if
PollableReturn.WOULD_BLOCK
is returned some underlying transports like D/TLS require that you re-send the samevectors
andnVectors
in the next write call.The behaviour of this method is undefined if g_pollable_output_stream_can_poll() returns
false
for this PollableOutputStream.- Parameters:
vectors
- the buffer containing theGOutputVectors
to write.bytesWritten
- location to store the number of bytes that were written to the streamcancellable
- aGCancellable
, ornull
- Returns:
- %
GPOLLABLERETURNOK
on success,PollableReturn.WOULD_BLOCK
if the stream is not currently writable (anderror
is not set), orPollableReturn.FAILED
if there was an error in which caseerror
will be set. - Throws:
GErrorException
- seeGError
-