diff options
Diffstat (limited to 'android')
-rw-r--r-- | android/hw-pipe-net.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/android/hw-pipe-net.c b/android/hw-pipe-net.c index 5a25401..3e8dc70 100644 --- a/android/hw-pipe-net.c +++ b/android/hw-pipe-net.c @@ -204,10 +204,9 @@ netPipe_initFromAddress( void* hwpipe, const SockAddress* address, Looper* loop } loopIo_init(pipe->io, looper, fd, netPipe_io_func, pipe); - asyncConnector_init(pipe->connector, address, pipe->io); + status = asyncConnector_init(pipe->connector, address, pipe->io); pipe->state = STATE_CONNECTING; - status = asyncConnector_run(pipe->connector); if (status == ASYNC_ERROR) { D("%s: Could not connect to socket: %s", __FUNCTION__, errno_str); @@ -234,6 +233,17 @@ netPipe_closeFromGuest( void* opaque ) netPipe_free(pipe); } +static int netPipeReadySend(NetPipe *pipe) +{ + if (pipe->state == STATE_CONNECTED) + return 0; + else if (pipe->state == STATE_CONNECTING) + return PIPE_ERROR_AGAIN; + else if (pipe->hwpipe == NULL) + return PIPE_ERROR_INVAL; + else + return PIPE_ERROR_IO; +} static int netPipe_sendBuffers( void* opaque, const GoldfishPipeBuffer* buffers, int numBuffers ) @@ -245,6 +255,10 @@ netPipe_sendBuffers( void* opaque, const GoldfishPipeBuffer* buffers, int numBuf const GoldfishPipeBuffer* buff = buffers; const GoldfishPipeBuffer* buffEnd = buff + numBuffers; + ret = netPipeReadySend(pipe); + if (ret != 0) + return ret; + for (; buff < buffEnd; buff++) count += buff->size; |