summaryrefslogtreecommitdiffstats
path: root/socket.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-03-31 06:38:37 -0700
committerKaz Kylheku <kaz@kylheku.com>2016-03-31 06:38:37 -0700
commit7c3a6b3991a9b57377087c18375f60d68512b17e (patch)
tree6fcc65bc164c4d7642b6dcb57111477ebc392de5 /socket.c
parentb8e5ade6282798f705bf417fc5d92fcdd811de98 (diff)
downloadtxr-7c3a6b3991a9b57377087c18375f60d68512b17e.tar.gz
txr-7c3a6b3991a9b57377087c18375f60d68512b17e.tar.bz2
txr-7c3a6b3991a9b57377087c18375f60d68512b17e.zip
sock-set-peer shouldn't mark dgram sockets connected.
Merely setting a peer doesn't actually connect the socket, so it must not be marked connected. If it is wrongly marked connected, then dgram_flush will wrongly use send rather than sendto. * socket.c (dgram_set_sock_peer): Don't set sock_connected flag. (sock_connect): Set the sock_connected flag here, for dgram sockets.
Diffstat (limited to 'socket.c')
-rw-r--r--socket.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/socket.c b/socket.c
index 07286974..39c4d931 100644
--- a/socket.c
+++ b/socket.c
@@ -602,7 +602,6 @@ static val dgram_set_sock_peer(val stream, val peer)
{
struct dgram_stream *d = coerce(struct dgram_stream *, stream->co.handle);
sockaddr_pack(peer, d->family, &d->peer_addr, &d->pa_len);
- d->sock_connected = 1;
return set(mkloc(d->peer, stream), peer);
}
@@ -736,6 +735,11 @@ static val sock_connect(val sock, val sockaddr, val timeout)
sock_set_peer(sock, sockaddr);
+ if (sock_type(sock) == num_fast(SOCK_DGRAM)) {
+ struct dgram_stream *d = coerce(struct dgram_stream *, sock->co.handle);
+ d->sock_connected = 1;
+ }
+
return sock;
}