1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-02 07:46:38 +02:00

Improve error management when there is socket error in IRC plugin

When reading socket, there is server disconnection only if error is fatal (if
it is not, we'll try again later).
Error codes and messages are now displayed for all socket errors.
This commit is contained in:
Sebastien Helleu
2009-09-18 23:00:29 +02:00
parent 19d9fc9e13
commit 693246a61a
9 changed files with 240 additions and 113 deletions
+58 -14
View File
@@ -853,8 +853,8 @@ irc_server_send (struct t_irc_server *server, const char *buffer, int size_buf)
if (!server)
{
weechat_printf (NULL,
_("%s%s: error sending data to IRC server: null "
"pointer (please report problem to developers)"),
_("%s%s: sending data to server: null pointer (please "
"report problem to developers)"),
weechat_prefix ("error"), IRC_PLUGIN_NAME);
return 0;
}
@@ -862,9 +862,8 @@ irc_server_send (struct t_irc_server *server, const char *buffer, int size_buf)
if (size_buf <= 0)
{
weechat_printf (server->buffer,
_("%s%s: error sending data to IRC server: empty "
"buffer (please report problem to "
"developers)"),
_("%s%s: sending data to server: empty buffer (please "
"report problem to developers)"),
weechat_prefix ("error"), IRC_PLUGIN_NAME);
return 0;
}
@@ -878,10 +877,24 @@ irc_server_send (struct t_irc_server *server, const char *buffer, int size_buf)
if (rc < 0)
{
weechat_printf (server->buffer,
_("%s%s: error sending data to IRC server (%s)"),
weechat_prefix ("error"), IRC_PLUGIN_NAME,
strerror (errno));
#ifdef HAVE_GNUTLS
if (server->ssl_connected)
{
weechat_printf (server->buffer,
_("%s%s: sending data to server: %d %s"),
weechat_prefix ("error"), IRC_PLUGIN_NAME,
rc,
gnutls_strerror (rc));
}
else
#endif
{
weechat_printf (server->buffer,
_("%s%s: sending data to server: %d %s"),
weechat_prefix ("error"), IRC_PLUGIN_NAME,
errno,
strerror (errno));
}
}
return rc;
@@ -1556,11 +1569,42 @@ irc_server_recv_cb (void *arg_server, int fd)
}
else
{
weechat_printf (server->buffer,
_("%s%s: cannot read data from socket, "
"disconnecting from server..."),
weechat_prefix ("error"), IRC_PLUGIN_NAME);
irc_server_disconnect (server, 1);
#ifdef HAVE_GNUTLS
if (server->ssl_connected)
{
if ((num_read == 0)
|| ((num_read != GNUTLS_E_AGAIN) && (num_read != GNUTLS_E_INTERRUPTED)))
{
weechat_printf (server->buffer,
_("%s%s: reading data on socket: error %d %s"),
weechat_prefix ("error"), IRC_PLUGIN_NAME,
num_read,
(num_read == 0) ? _("(connection closed by peer)") :
gnutls_strerror (num_read));
weechat_printf (server->buffer,
_("%s: disconnecting from server..."),
IRC_PLUGIN_NAME);
irc_server_disconnect (server, 1);
}
}
else
#endif
{
if ((num_read == 0)
|| ((errno != EAGAIN) && (errno != EWOULDBLOCK)))
{
weechat_printf (server->buffer,
_("%s%s: reading data on socket: error %d %s"),
weechat_prefix ("error"), IRC_PLUGIN_NAME,
errno,
(num_read == 0) ? _("(connection closed by peer)") :
strerror (errno));
weechat_printf (server->buffer,
_("%s: disconnecting from server..."),
IRC_PLUGIN_NAME);
irc_server_disconnect (server, 1);
}
}
}
return WEECHAT_RC_OK;