aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/msgpack_rpc
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2017-04-26 13:10:21 +0200
committerBjörn Linse <bjorn.linse@gmail.com>2017-05-29 19:02:49 +0200
commit6a7593875827374c15484dd4eecd31a88f8c6f77 (patch)
treef032f5dc5cb056c9988d684b1f8387b41a17e48e /src/nvim/msgpack_rpc
parent9cc185dc6d9d665fe5ba3702a0a8af09151fe5c4 (diff)
downloadrneovim-6a7593875827374c15484dd4eecd31a88f8c6f77.tar.gz
rneovim-6a7593875827374c15484dd4eecd31a88f8c6f77.tar.bz2
rneovim-6a7593875827374c15484dd4eecd31a88f8c6f77.zip
channels: implement sockopen() to connect to socket
Helped-By: oni-link <knil.ino@gmail.com>
Diffstat (limited to 'src/nvim/msgpack_rpc')
-rw-r--r--src/nvim/msgpack_rpc/channel.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c
index cd64e14976..0ff749649b 100644
--- a/src/nvim/msgpack_rpc/channel.c
+++ b/src/nvim/msgpack_rpc/channel.c
@@ -145,6 +145,25 @@ void channel_from_connection(SocketWatcher *watcher)
rstream_start(&channel->data.stream, parse_msgpack, channel);
}
+uint64_t channel_connect(bool tcp, const char *address,
+ int timeout, const char **error)
+{
+ Channel *channel = register_channel(kChannelTypeSocket, 0, NULL);
+ if (!socket_connect(&main_loop, &channel->data.stream,
+ tcp, address, timeout, error)) {
+ decref(channel);
+ return 0;
+ }
+
+ incref(channel); // close channel only after the stream is closed
+ channel->data.stream.internal_close_cb = close_cb;
+ channel->data.stream.internal_data = channel;
+ wstream_init(&channel->data.stream, 0);
+ rstream_init(&channel->data.stream, CHANNEL_BUFFER_SIZE);
+ rstream_start(&channel->data.stream, parse_msgpack, channel);
+ return channel->id;
+}
+
/// Sends event/arguments to channel
///
/// @param id The channel id. If 0, the event will be sent to all