With weechat, if the network changes in anyway that causes resolv.conf
to be updated, that is not picked up, resulting in
irc: connecting to server XXXX.com/1026 (SSL)...
irc: address "XXX.com" not found
irc: error: Name or service not known
irc: reconnecting to server in 30 seconds
This happens, especially when one connects to an irc server behind a
VPN.
This can also happen when there is no network connectivity weechat was started
but later network is connected to.
The fix is simple, it relies on calling res_init (3) before getaddrinfo in
network_connect_child and other places.
res_init reloads the resolv.conf and getaddrinfo does not fail with
address resolution error.
This pointer is the first argument received by callbacks, and the
existing argument "data" is now automatically freed by WeeChat when the
object containing the callback is removed.
With this new pointer, the linked list of callbacks in scripts has been
removed. This will improve speed of scripts (using a lot of hooks),
reduce memory used by scripts and reduce time to unload scripts.
Following functions are affected in the C API:
* exec_on_files
* config_new
* config_new_section
* config_new_option
* hook_command
* hook_command_run
* hook_timer
* hook_fd
* hook_process
* hook_process_hashtable
* hook_connect
* hook_print
* hook_signal
* hook_hsignal
* hook_config
* hook_completion
* hook_modifier
* hook_info
* hook_info_hashtable
* hook_infolist
* hook_hdata
* hook_focus
* unhook_all_plugin
* buffer_new
* bar_item_new
* upgrade_new
* upgrade_read
When signals (e.g. SIGWINCH for terminal resize) are fired they cause poll
to fail with EINTR, erroring file receival even when there wasn't a problem
with it.
This patch adds additional checks for EINTR and EAGAIN that cause retry of
poll, since both are unrelated to actual file receival.
When #5 was fixed, we started to always bind to the local address
connected to the irc server because the xfer.network.own_ip address
may not be able to be bound to when NATed. But this means when the
own_ip address is a different family (IPv4 vs IPv6) from the irc
server connection, we were listening for connections on the wrong
interface.
This patch lets us figure out which family is being used,
(xfer.network.own_ip's family, or the irc connection's family
otherwise) and bind() into the correct family via that family's
wildcard address.
Fixes#5. xfer shouldn't try to bind() to the own_ip
address. Instead, always bind to the same local address that is
connected to the irc server, and just change the out_addr if own_ip is
used.
Also fixes a memory leak in error path.