unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Asynchronous DNS
@ 2016-01-23 13:50 Lars Magne Ingebrigtsen
  2016-01-23 14:56 ` Elias Mårtenson
                   ` (5 more replies)
  0 siblings, 6 replies; 190+ messages in thread
From: Lars Magne Ingebrigtsen @ 2016-01-23 13:50 UTC (permalink / raw)
  To: emacs-devel

I talked about this a few years ago, but I didn't get very far, so I
thought I'd reopen the subject and actually implement something this
time.

The problem is a general one: Everything about network communication in
Emacs is asynchronous, except name resolution.  In many cases, this
isn't really that much of a problem, because whatever Emacs is doing has
to wait for the entire network process to finish (say, copying a file
over tramp), so that one part is synchronous isn't very noticeable.

The one place it's really noticeable is in eww.  You go to a page, and
then Emacs will freeze (sometimes for many seconds), and then Emacs will
unfreeze and start inserting images into the page.  The freeze bit is
when it's doing name resolution in `make-network-process' by calling
getaddrinfo or gethostbyname.

I see four ways of implementing an async name resolution function:

1) Add a new `resolve-name' function that would fork Emacs, call
getaddrinfo/gethostbyname, and do a callback once we get a reply.  The
problem is that a forked Emacs is a very strange thing, and is not
something we otherwise do.  I looked at this for a day last time, and I
couldn't get it to work, really.  Perhaps somebody else could, though.

2) Use one of the newer async C resolver libraries.  This would not be
available on all platforms, and would be Yet Another Dependency which
I'm sure everybody would rather that we avoid.

3) Create a tiny helper program in lib-src that would read names from
stdin and output resolves on stdout.  It would use
getaddrinfo/gethostbyname, and could very well be multithreaded, so that
it could do name resolution on parallel.

4) Pick the data out of res_init to find the DNS servers, and then just
use dns.el for name resolution.  This would be trivial to implement, but
may not respect the name resolutions settings on some operating systems.

In either case, I envision anything that wants async name resolution to
basically transform from

(make-network-process :host "foo.bar" ...)

to

(resolve-name "foo.bar"
  (lambda (status ip)
    (make-network-process :host "foo.bar" :ip ip ...)))

or something along those lines.  That is -- pass in a preresolved IP
address to `make-network-process'.

(Or list of addresses in the case of multihomed hosts, of course.
Details, details.)

So what do you think?  I'm up for implementing 3) or 4), but probably
not 1) or 2), but I think 1) would be the cleanest way to implement
this, if possible.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 190+ messages in thread

end of thread, other threads:[~2016-02-29  8:41 UTC | newest]

Thread overview: 190+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-23 13:50 Asynchronous DNS Lars Magne Ingebrigtsen
2016-01-23 14:56 ` Elias Mårtenson
2016-01-24 21:17   ` Lars Magne Ingebrigtsen
2016-01-25  8:58     ` Elias Mårtenson
2016-01-25 15:51       ` Eli Zaretskii
2016-01-25 17:15         ` Elias Mårtenson
2016-01-25 17:26           ` Eli Zaretskii
2016-01-23 21:42 ` Paul Eggert
2016-01-24 13:53   ` Lars Magne Ingebrigtsen
2016-01-24 14:01     ` Lars Magne Ingebrigtsen
2016-01-24 14:14       ` Lars Magne Ingebrigtsen
2016-01-24 19:58         ` Paul Eggert
2016-01-24  4:49 ` Stefan Monnier
2016-01-24 13:56   ` Lars Magne Ingebrigtsen
2016-01-24 17:16     ` Lars Magne Ingebrigtsen
2016-01-25  2:06       ` Stefan Monnier
2016-01-26 19:48 ` John Wiegley
2016-01-26 22:05 ` Florian Weimer
2016-01-30  0:11 ` Lars Ingebrigtsen
2016-01-30  2:39   ` Alex Dunn
2016-01-30  2:58     ` Lars Ingebrigtsen
2016-01-30  4:11       ` Alex Dunn
2016-01-30  4:34         ` Lars Ingebrigtsen
2016-02-01  3:55           ` Lars Ingebrigtsen
2016-01-30  7:23   ` Eli Zaretskii
2016-01-30  7:46     ` Lars Ingebrigtsen
2016-01-30  8:46       ` Eli Zaretskii
2016-01-30 22:46         ` Lars Ingebrigtsen
2016-01-31  6:12       ` Ken Raeburn
2016-02-01  2:46         ` Lars Ingebrigtsen
2016-01-31 14:03   ` Andy Moreton
2016-02-01  2:08     ` Lars Ingebrigtsen
2016-02-01  2:36       ` Lars Ingebrigtsen
2016-02-01 18:51         ` Eli Zaretskii
2016-02-02  1:15           ` Lars Ingebrigtsen
2016-02-02  3:38             ` Eli Zaretskii
2016-02-02  3:48               ` Lars Ingebrigtsen
2016-02-02 13:25                 ` Stefan Monnier
2016-02-02 16:24                   ` Eli Zaretskii
2016-02-02 17:11                     ` Stefan Monnier
2016-02-02 16:12                 ` Eli Zaretskii
2016-02-03  0:42                   ` Lars Ingebrigtsen
2016-02-03 15:49                     ` Eli Zaretskii
2016-02-04  2:22                       ` Lars Ingebrigtsen
2016-02-04  8:18                         ` Alain Schneble
2016-02-04  8:55                           ` Lars Ingebrigtsen
2016-02-04 10:13                             ` Alain Schneble
2016-02-05  2:08                               ` Lars Ingebrigtsen
2016-02-05  7:19                                 ` Eli Zaretskii
2016-02-05  7:32                                   ` Lars Ingebrigtsen
2016-02-13 23:47                                     ` Alain Schneble
2016-02-14  2:22                                       ` Lars Ingebrigtsen
2016-02-14 11:19                                         ` Alain Schneble
2016-02-14 16:40                                           ` Eli Zaretskii
2016-02-16 21:37                                             ` Alain Schneble
2016-02-20  1:28                                               ` Lars Ingebrigtsen
2016-02-20 17:55                                                 ` Paul Eggert
2016-02-20 20:18                                                   ` Alain Schneble
2016-02-20 20:33                                                     ` Paul Eggert
2016-02-21 10:29                                                       ` Alain Schneble
2016-02-26 23:54                                                         ` YAMAMOTO Mitsuharu
2016-02-27  3:57                                                           ` Lars Ingebrigtsen
2016-02-27  9:22                                                             ` Alain Schneble
2016-02-28  4:43                                                               ` Lars Ingebrigtsen
2016-02-28  9:44                                                                 ` Andreas Schwab
2016-02-29  2:59                                                                   ` Lars Ingebrigtsen
2016-02-29  3:30                                                                     ` Lars Ingebrigtsen
2016-02-29  8:41                                                                       ` Andreas Schwab
2016-02-20 19:31                                                 ` Alain Schneble
2016-02-20 19:57                                                   ` Alain Schneble
2016-02-21  2:36                                                     ` Lars Ingebrigtsen
2016-02-21  3:03                                                       ` Lars Ingebrigtsen
2016-02-21 18:55                                                         ` Alain Schneble
2016-02-21 20:23                                                           ` Eli Zaretskii
2016-02-22  2:15                                                             ` Lars Ingebrigtsen
2016-02-22  3:39                                                               ` Eli Zaretskii
2016-02-22  4:03                                                                 ` Lars Ingebrigtsen
2016-02-22  5:45                                                                   ` Lars Ingebrigtsen
2016-02-22  2:07                                                           ` Lars Ingebrigtsen
2016-02-24  6:26                                                             ` Lars Ingebrigtsen
2016-02-24  6:29                                                               ` Paul Eggert
2016-02-24  6:52                                                                 ` Lars Ingebrigtsen
2016-02-24  8:27                                                               ` John Wiegley
2016-02-21 19:35                                                         ` Alain Schneble
2016-02-22  2:01                                                           ` Lars Ingebrigtsen
2016-02-20 10:57                                               ` Eli Zaretskii
2016-02-16  2:09                                       ` Lars Ingebrigtsen
2016-02-05  9:37                                   ` Alain Schneble
2016-02-04 16:30                         ` Eli Zaretskii
2016-02-05  2:31                           ` Lars Ingebrigtsen
2016-02-05  7:20                             ` Eli Zaretskii
2016-02-03  2:49                   ` Lars Ingebrigtsen
2016-02-02  6:41             ` Alain Schneble
2016-02-02  7:06               ` Lars Ingebrigtsen
2016-02-02  7:49                 ` Alain Schneble
2016-02-02 21:27                   ` Alain Schneble
2016-02-03  0:22                   ` Lars Ingebrigtsen
2016-02-03 10:22                     ` Yuri Khan
2016-02-04  0:18                       ` Lars Ingebrigtsen
2016-02-01 11:58       ` Andy Moreton
2016-02-01 19:10         ` Eli Zaretskii
2016-02-01 22:18           ` Andy Moreton
2016-02-02  1:54         ` Lars Ingebrigtsen
2016-02-02  2:05           ` YAMAMOTO Mitsuharu
2016-02-02  2:18             ` Lars Ingebrigtsen
2016-02-02  3:42           ` Eli Zaretskii
2016-02-03  0:50             ` Lars Ingebrigtsen
2016-02-03  2:43               ` Lars Ingebrigtsen
2016-02-03 15:50               ` Eli Zaretskii
2016-02-04  2:25                 ` Lars Ingebrigtsen
2016-02-04 16:31                   ` Eli Zaretskii
2016-02-05  2:32                     ` Lars Ingebrigtsen
2016-02-05  7:21                       ` Eli Zaretskii
2016-02-05  7:33                         ` Lars Ingebrigtsen
2016-02-06  7:49                           ` Lars Ingebrigtsen
2016-02-06  8:19                             ` Eli Zaretskii
2016-02-07  0:34                               ` Alain Schneble
2016-02-07  1:38                                 ` Lars Ingebrigtsen
2016-02-07 11:41                                   ` Alain Schneble
2016-02-07 19:16                                     ` Eli Zaretskii
2016-02-07 20:24                                       ` Alain Schneble
2016-02-08  1:55                                     ` Lars Ingebrigtsen
2016-02-08  3:40                                       ` Lars Ingebrigtsen
2016-02-08  7:40                                       ` Alain Schneble
2016-02-08  7:52                                         ` Lars Ingebrigtsen
2016-02-08  8:10                                           ` Alain Schneble
2016-02-09  0:37                                             ` Lars Ingebrigtsen
2016-02-09  9:02                                               ` Alain Schneble
2016-02-09 13:46                                                 ` Lars Ingebrigtsen
2016-02-09 17:00                                                 ` Eli Zaretskii
2016-02-09 20:43                                                   ` Alain Schneble
2016-02-09 20:48                                                     ` Eli Zaretskii
2016-02-09 23:22                                                     ` Lars Ingebrigtsen
2016-02-10 10:39                                                       ` Alain Schneble
2016-02-12  2:15                                                         ` Lars Ingebrigtsen
2016-02-12 10:12                                                           ` Alain Schneble
2016-02-13  4:04                                                             ` Lars Ingebrigtsen
2016-02-13 10:16                                                               ` Alain Schneble
2016-02-14  2:20                                                                 ` Lars Ingebrigtsen
2016-02-14  5:56                                                                   ` Eli Zaretskii
2016-02-14  7:01                                                                     ` Lars Ingebrigtsen
2016-02-14 13:56                                                                       ` Stefan Monnier
2016-02-15  0:19                                                                         ` Alain Schneble
2016-02-15  4:22                                                                         ` Lars Ingebrigtsen
2016-02-14 16:32                                                                       ` Eli Zaretskii
2016-02-15  0:14                                                                         ` Alain Schneble
2016-02-15  3:41                                                                           ` Eli Zaretskii
2016-02-15  4:30                                                                             ` Lars Ingebrigtsen
2016-02-15  0:02                                                                       ` Alain Schneble
2016-02-15  4:39                                                                         ` Lars Ingebrigtsen
2016-02-15  6:14                                                                           ` Lars Ingebrigtsen
2016-02-15  6:25                                                                             ` Lars Ingebrigtsen
2016-02-15 10:55                                                                             ` Eli Zaretskii
2016-02-15 12:01                                                                               ` Andreas Schwab
2016-02-15 13:50                                                                                 ` Eli Zaretskii
2016-02-16  2:26                                                                               ` Lars Ingebrigtsen
2016-02-15 10:50                                                                           ` Eli Zaretskii
2016-02-15 11:06                                                                             ` Alain Schneble
2016-02-15 13:49                                                                               ` Eli Zaretskii
2016-02-15 15:04                                                                                 ` Alain Schneble
2016-02-15 16:40                                                                                   ` Alain Schneble
2016-02-16  2:13                                                                                     ` Lars Ingebrigtsen
2016-02-16  6:48                                                                                       ` Alain Schneble
2016-02-15 18:13                                                                           ` Alain Schneble
2016-02-12 10:35                                                           ` Andreas Schwab
2016-02-12 11:37                                                             ` Alain Schneble
2016-02-08 18:11                                           ` Eli Zaretskii
2016-02-09  0:47                                             ` Lars Ingebrigtsen
2016-02-09 16:56                                               ` Eli Zaretskii
2016-02-08 10:43                                       ` Andreas Schwab
2016-02-08 11:55                                         ` Alain Schneble
2016-02-08 12:55                                           ` Andreas Schwab
2016-02-08 14:25                                             ` Alain Schneble
2016-02-08 14:31                                               ` Andreas Schwab
2016-02-09  0:40                                                 ` Lars Ingebrigtsen
2016-02-09  9:15                                                   ` Alain Schneble
2016-02-09  9:35                                                     ` Alain Schneble
2016-02-07 15:55                                 ` Eli Zaretskii
2016-02-07 17:45                                   ` Alain Schneble
2016-02-08  2:03                                   ` Lars Ingebrigtsen
2016-02-08 15:56                                     ` John Wiegley
2016-02-08 20:30                                       ` Rasmus
2016-02-09  0:34                                       ` Lars Ingebrigtsen
2016-02-08 18:22                                     ` Eli Zaretskii
2016-02-07  1:35                               ` Lars Ingebrigtsen
2016-02-07 16:07                                 ` Eli Zaretskii
2016-02-08  2:05                                   ` Lars Ingebrigtsen
2016-02-08 18:20                                     ` Eli Zaretskii
2016-02-07 17:27                             ` John Wiegley
2016-02-08  1:26                               ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).