Implement irc_try_read()
This commit is contained in:
parent
13d3299816
commit
93450332fe
33
src/kike.c
33
src/kike.c
|
@ -380,8 +380,37 @@ irc_process_message (const struct irc_message *msg,
|
||||||
static bool
|
static bool
|
||||||
irc_try_read (struct connection *conn)
|
irc_try_read (struct connection *conn)
|
||||||
{
|
{
|
||||||
// TODO
|
struct str *buf = &conn->read_buffer;
|
||||||
return true;
|
ssize_t n_read;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
str_ensure_space (buf, 512);
|
||||||
|
n_read = recv (conn->socket_fd, buf->str + buf->len,
|
||||||
|
buf->alloc - buf->len - 1 /* null byte */, 0);
|
||||||
|
|
||||||
|
if (n_read > 0)
|
||||||
|
{
|
||||||
|
buf->str[buf->len += n_read] = '\0';
|
||||||
|
// TODO: discard characters above the 512 character limit
|
||||||
|
irc_process_buffer (buf, irc_process_message, conn);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (n_read == 0)
|
||||||
|
{
|
||||||
|
connection_abort (conn, NULL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errno == EAGAIN)
|
||||||
|
return true;
|
||||||
|
if (errno == EINTR)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
print_debug ("%s: %s: %s", __func__, "recv", strerror (errno));
|
||||||
|
connection_abort (conn, strerror (errno));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
|
|
Loading…
Reference in New Issue