diff options
| author | Björn Linse <bjorn.linse@gmail.com> | 2017-04-26 13:10:21 +0200 |
|---|---|---|
| committer | Björn Linse <bjorn.linse@gmail.com> | 2017-05-29 19:02:49 +0200 |
| commit | 6a7593875827374c15484dd4eecd31a88f8c6f77 (patch) | |
| tree | f032f5dc5cb056c9988d684b1f8387b41a17e48e /src/nvim/msgpack_rpc | |
| parent | 9cc185dc6d9d665fe5ba3702a0a8af09151fe5c4 (diff) | |
| download | rneovim-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.c | 19 |
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 |