libera/#sbcl - IRC Chatlog
Search
14:53:50
Guest74
Hi, is there a way to tell how much data has been received on a local socket stream so I can use read-sequence on it?
15:02:09
scymtym_
i don't know of any way. but just to be sure: you know that READ-SEQUENCE may read less than the length of the supplied sequence?
15:03:29
Guest74
ah, I did not remember that! Thanks, though would still appreciate if anybody knows how to get an exact count.
15:05:17
scymtym_
actually, i'm not sure that question is clearly defined. do you count data that is locally buffered in the socket stream, data in the kernel receive buffer, data that is in-flight at the time of the READ-SEQUENCE call?
15:09:28
scymtym_
but i don't think a userspace program or even the kernel have a way of knowing that all data has been sent unless the connection is closed at that point
15:18:17
Guest74
hm, I thought it worked, but trying again it seems to hang waiting for the fd to be usuable.
15:18:56
Shinmera
tcp and udp both send data in packets. however, in the case of UDP those packets may be fragmented and may not contain a full "message" as it was sent. for this reason TCP is usually represented with a stream interface.
15:20:53
Shinmera
depends on how the socket was created. there's stream sockets and datagram sockets, same as tcp/udp.
15:21:31
Shinmera
I assume in SBCL's case it'll be a stream socket, so you need to handle it the same way as tcp: implement your protocol in a way that you know how much to read and how to deal with it when the sender lies to you.
15:23:14
Guest74
that's unfortunate. I'm assuming there's nothing more clever than reading bytes until a terminating byte?
15:28:26
Guest74
Oh, does usocket have local sockets? I'd rather use something not implementation specific, but that doesnt require some random c library being installed.
15:29:52
flip214
on Linux, a local TCP socket is mostly the same as a unix socket (performance-wise)
15:40:46
etimmons
scymtym_: I thought READ-SEQUENCE could only read less than the specified length if the end of file was reached
16:45:57
scymtym_
etimmons: sure. that's why i brought up the question of how available data should be defined and mentioned closed connections