[Spice-devel] [PATCH spice-server v3 10/32] red-stream: Use socket compatibility layer
Frediano Ziglio
fziglio at redhat.com
Mon Jan 7 18:01:53 UTC 2019
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
server/red-stream.c | 32 +++++++++++++++++---------------
server/red-stream.h | 4 ++--
2 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/server/red-stream.c b/server/red-stream.c
index 57034a64..33086d99 100644
--- a/server/red-stream.c
+++ b/server/red-stream.c
@@ -106,15 +106,15 @@ struct RedStreamPrivate {
* Set TCP_CORK on socket
*/
/* NOTE: enabled must be int */
-static int socket_set_cork(int socket, int enabled)
+static int socket_set_cork(socket_t socket, int enabled)
{
SPICE_VERIFY(sizeof(enabled) == sizeof(int));
- return setsockopt(socket, IPPROTO_TCP, TCP_CORK, &enabled, sizeof(enabled));
+ return socket_setopt(socket, IPPROTO_TCP, TCP_CORK, &enabled, sizeof(enabled));
}
static ssize_t stream_write_cb(RedStream *s, const void *buf, size_t size)
{
- return write(s->socket, buf, size);
+ return socket_write(s->socket, buf, size);
}
static ssize_t stream_writev_cb(RedStream *s, const struct iovec *iov, int iovcnt)
@@ -132,7 +132,7 @@ static ssize_t stream_writev_cb(RedStream *s, const struct iovec *iov, int iovcn
for (i = 0; i < tosend; i++) {
expected += iov[i].iov_len;
}
- n = writev(s->socket, iov, tosend);
+ n = socket_writev(s->socket, iov, tosend);
if (n <= expected) {
if (n > 0)
ret += n;
@@ -148,7 +148,7 @@ static ssize_t stream_writev_cb(RedStream *s, const struct iovec *iov, int iovcn
static ssize_t stream_read_cb(RedStream *s, void *buf, size_t size)
{
- return read(s->socket, buf, size);
+ return socket_read(s->socket, buf, size);
}
static ssize_t stream_ssl_write_cb(RedStream *s, const void *buf, size_t size)
@@ -274,7 +274,7 @@ int red_stream_get_family(const RedStream *s)
{
spice_return_val_if_fail(s != NULL, -1);
- if (s->socket == -1)
+ if (!socket_is_valid(s->socket))
return -1;
return s->priv->info->laddr_ext.ss_family;
@@ -355,7 +355,7 @@ int red_stream_send_msgfd(RedStream *stream, int fd)
}
do {
- r = sendmsg(stream->socket, &msgh, MSG_NOSIGNAL);
+ r = sendmsg(socket_get_raw(stream->socket), &msgh, MSG_NOSIGNAL);
} while (r < 0 && (errno == EINTR || errno == EAGAIN));
return r;
@@ -404,7 +404,7 @@ void red_stream_free(RedStream *s)
}
red_stream_remove_watch(s);
- close(s->socket);
+ socket_close(s->socket);
g_free(s);
}
@@ -416,21 +416,23 @@ void red_stream_push_channel_event(RedStream *s, int event)
main_dispatcher_channel_event(md, event, s->priv->info);
}
-static void red_stream_set_socket(RedStream *stream, int socket)
+static void red_stream_set_socket(RedStream *stream, socket_t socket)
{
stream->socket = socket;
/* deprecated fields. Filling them for backward compatibility */
stream->priv->info->llen = sizeof(stream->priv->info->laddr);
stream->priv->info->plen = sizeof(stream->priv->info->paddr);
- getsockname(stream->socket, (struct sockaddr*)(&stream->priv->info->laddr), &stream->priv->info->llen);
- getpeername(stream->socket, (struct sockaddr*)(&stream->priv->info->paddr), &stream->priv->info->plen);
+ socket_getsockname(stream->socket, (struct sockaddr*)(&stream->priv->info->laddr),
+ &stream->priv->info->llen);
+ socket_getpeername(stream->socket, (struct sockaddr*)(&stream->priv->info->paddr),
+ &stream->priv->info->plen);
stream->priv->info->flags |= SPICE_CHANNEL_EVENT_FLAG_ADDR_EXT;
stream->priv->info->llen_ext = sizeof(stream->priv->info->laddr_ext);
stream->priv->info->plen_ext = sizeof(stream->priv->info->paddr_ext);
- getsockname(stream->socket, (struct sockaddr*)(&stream->priv->info->laddr_ext),
+ socket_getsockname(stream->socket, (struct sockaddr*)(&stream->priv->info->laddr_ext),
&stream->priv->info->llen_ext);
- getpeername(stream->socket, (struct sockaddr*)(&stream->priv->info->paddr_ext),
+ socket_getpeername(stream->socket, (struct sockaddr*)(&stream->priv->info->paddr_ext),
&stream->priv->info->plen_ext);
}
@@ -446,7 +448,7 @@ void red_stream_set_channel(RedStream *stream, int connection_id,
}
}
-RedStream *red_stream_new(RedsState *reds, int socket)
+RedStream *red_stream_new(RedsState *reds, socket_t socket)
{
RedStream *stream;
@@ -513,7 +515,7 @@ RedStreamSslStatus red_stream_enable_ssl(RedStream *stream, SSL_CTX *ctx)
BIO *sbio;
// Handle SSL handshaking
- if (!(sbio = BIO_new_socket(stream->socket, BIO_NOCLOSE))) {
+ if (!(sbio = BIO_new_socket(socket_get_raw(stream->socket), BIO_NOCLOSE))) {
spice_warning("could not allocate ssl bio socket");
return RED_STREAM_SSL_STATUS_ERROR;
}
diff --git a/server/red-stream.h b/server/red-stream.h
index 9a7cc617..52082f68 100644
--- a/server/red-stream.h
+++ b/server/red-stream.h
@@ -30,7 +30,7 @@ typedef struct RedStream RedStream;
typedef struct RedStreamPrivate RedStreamPrivate;
struct RedStream {
- int socket;
+ socket_t socket;
SpiceWatch *watch;
RedStreamPrivate *priv;
@@ -58,7 +58,7 @@ void red_stream_push_channel_event(RedStream *s, int event);
void red_stream_remove_watch(RedStream* s);
void red_stream_set_channel(RedStream *stream, int connection_id,
int channel_type, int channel_id);
-RedStream *red_stream_new(RedsState *reds, int socket);
+RedStream *red_stream_new(RedsState *reds, socket_t socket);
void red_stream_set_core_interface(RedStream *stream, SpiceCoreInterfaceInternal *core);
bool red_stream_is_ssl(RedStream *stream);
RedStreamSslStatus red_stream_ssl_accept(RedStream *stream);
--
2.20.1
More information about the Spice-devel
mailing list