summaryrefslogtreecommitdiff
path: root/src/packet_stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/packet_stream.c')
-rw-r--r--src/packet_stream.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/packet_stream.c b/src/packet_stream.c
index 7868242..0a45b22 100644
--- a/src/packet_stream.c
+++ b/src/packet_stream.c
@@ -104,7 +104,7 @@ static void stream_read_callback(struct ev_loop *loop, ev_io *w, s32 revents)
}
}
-static bool stream_connected(struct nn_packet_stream *stream)
+static bool set_stream_connected(struct nn_packet_stream *stream)
{
stream->connect = PACKET_STREAM_CONNECTED;
al_assert(stream->corked);
@@ -134,7 +134,7 @@ static void stream_write_callback(struct ev_loop *loop, ev_io *w, s32 revents)
// Try again on next POLLOUT, not sure if this can actually happen.
return;
}
- if (stream_connected(stream)) {
+ if (set_stream_connected(stream)) {
ev_io_start(stream->loop->ev, &stream->revent);
}
}
@@ -201,7 +201,7 @@ void nn_packet_stream_from_socket(struct nn_packet_stream *stream, struct nn_eve
s32 fd = nn_socket_get_fd(&stream->sock);
ev_io_init_n(&stream->revent, stream_read_callback, fd, EV_READ);
ev_io_init_n(&stream->wevent, stream_write_callback, fd, EV_WRITE);
- if (stream_connected(stream)) {
+ if (set_stream_connected(stream)) {
ev_io_start(stream->loop->ev, &stream->revent);
}
}
@@ -234,15 +234,20 @@ void nn_packet_stream_connect(struct nn_packet_stream *stream, struct nn_event_l
do_connect_internal(stream, addr, port);
}
+// Keep in mind this stream will have had it's state reset in stop_internal().
void nn_packet_stream_reconnect(struct nn_packet_stream *stream, str *addr, u16 port)
{
+ if (stream->connect == PACKET_STREAM_CONNECTING) {
+ stop_write_internal(stream);
+ stop_internal(stream);
+ }
al_assert(stream->connect == PACKET_STREAM_DISCONNECTED);
do_connect_internal(stream, addr, port);
}
-bool nn_packet_stream_connected(struct nn_packet_stream *stream)
+bool nn_packet_stream_set_connected(struct nn_packet_stream *stream)
{
- return stream_connected(stream);
+ return set_stream_connected(stream);
}
void nn_packet_stream_cork(struct nn_packet_stream *stream, bool cork)
@@ -314,10 +319,8 @@ void nn_packet_stream_return_packets(struct nn_packet_stream *stream, struct nn_
void nn_packet_stream_disconnect(struct nn_packet_stream *stream)
{
+ al_assert(stream->connect != PACKET_STREAM_DISCONNECTED);
al_assert(stream->connect != PACKET_STREAM_DISCONNECTING);
- // If reusing this stream, keep in mind it will have been set back
- // to a default state in stop_internal().
- if (stream->connect == PACKET_STREAM_DISCONNECTED) return;
if (stream->direct) {
struct nn_packet_stream *direct = stream->direct;
direct->connect = PACKET_STREAM_DISCONNECTED;