Available socket bytes
Ever wondered how to find out how many bytes can be read from a socket? I did and it is really simple although possibly not portable.
ssize_t socket_get_available(int socket_fd)
{
int available = -1;
assert(0 <= socket_fd);
if (ioctl(socket_fd, FIONREAD, &available) < 0) {
return -1;
}
return (ssize_t) available;
}
May 24th, 2008 at 9:32 pm
Eeek! man ioctl_list:
“0×0000541B FIONREAD int *”
That you might be lucky and it happens to work on your platform is no excuse.
May 24th, 2008 at 9:39 pm
Also, since you’re returning -1 to indicate an error I think you want ssize_t. That is, if I remember correctly (take e.g. ssize_t read(…) vs size_t fread(…)).
May 24th, 2008 at 9:43 pm
Hi btw!
May 26th, 2008 at 7:43 am
Long time, no see!
Thanks for the suggestions! I fixed the implementation, apparently I don’t have the ioctl_list man page.