unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* 100% CPU on TCP servers
@ 2005-08-06 18:38 Juanma Barranquero
  2005-08-18 15:51 ` Juanma Barranquero
  0 siblings, 1 reply; 49+ messages in thread
From: Juanma Barranquero @ 2005-08-06 18:38 UTC (permalink / raw)


Lennart just discovered that

 (make-network-process :name "test" :server t :service t)

consumes 100% CPU, at least on Windows. Any idea what can be happening?

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers
  2005-08-06 18:38 100% CPU on TCP servers Juanma Barranquero
@ 2005-08-18 15:51 ` Juanma Barranquero
  2005-09-09 12:53   ` Kim F. Storm
                     ` (2 more replies)
  0 siblings, 3 replies; 49+ messages in thread
From: Juanma Barranquero @ 2005-08-18 15:51 UTC (permalink / raw)


(A question for process-savvy people)

It seems like 

>  (make-network-process :name "test" :server t :service t)

on Windows makes the server process to call server_accept_connection()
continuously (in a 2.8 GHz Pentium IV I've measured around 10,200
calls in 3,5 s, almost 2,900 calls per second). It's no wonder Emacs
is munching 50% CPU.

Any idea why that can be happening?

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers
  2005-08-18 15:51 ` Juanma Barranquero
@ 2005-09-09 12:53   ` Kim F. Storm
  2005-09-09 15:25     ` Juanma Barranquero
  2005-09-10  7:47   ` Jason Rumney
  2006-07-13 22:35   ` 100% CPU on TCP servers (on Windoze) Kim F. Storm
  2 siblings, 1 reply; 49+ messages in thread
From: Kim F. Storm @ 2005-09-09 12:53 UTC (permalink / raw)
  Cc: Emacs Devel

Juanma Barranquero <lekktu@gmail.com> writes:

> (A question for process-savvy people)
>
> It seems like 
>
>>  (make-network-process :name "test" :server t :service t)
>
> on Windows makes the server process to call server_accept_connection()
> continuously (in a 2.8 GHz Pentium IV I've measured around 10,200
> calls in 3,5 s, almost 2,900 calls per second). It's no wonder Emacs
> is munching 50% CPU.
>
> Any idea why that can be happening?

Perhaps some unhandled error...  What does the following say
when executed in *scratch* buffer:

(progn
  (defun my-log (server client message)
    (setq mm (cons message mm)))
  (setq mm
    (make-network-process :name "test" :server t :service t :log 'my-log))
  (sleep-for 5)
  mm)

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers
  2005-09-09 12:53   ` Kim F. Storm
@ 2005-09-09 15:25     ` Juanma Barranquero
  0 siblings, 0 replies; 49+ messages in thread
From: Juanma Barranquero @ 2005-09-09 15:25 UTC (permalink / raw)
  Cc: Emacs Devel

On 9/9/05, Kim F. Storm <storm@cua.dk> wrote:
> What does the following say
> when executed in *scratch* buffer:

Just

  #<process test>

as expected (and CPU time is at 50%; that's on a Windows XP Home).

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers
  2005-08-18 15:51 ` Juanma Barranquero
  2005-09-09 12:53   ` Kim F. Storm
@ 2005-09-10  7:47   ` Jason Rumney
  2005-09-10 23:01     ` Kim F. Storm
  2005-10-12 15:07     ` Kim F. Storm
  2006-07-13 22:35   ` 100% CPU on TCP servers (on Windoze) Kim F. Storm
  2 siblings, 2 replies; 49+ messages in thread
From: Jason Rumney @ 2005-09-10  7:47 UTC (permalink / raw)
  Cc: Emacs Devel

Juanma Barranquero <lekktu@gmail.com> writes:

> (A question for process-savvy people)
>
> It seems like 
>
>>  (make-network-process :name "test" :server t :service t)
>
> on Windows makes the server process to call server_accept_connection()
> continuously (in a 2.8 GHz Pentium IV I've measured around 10,200
> calls in 3,5 s, almost 2,900 calls per second). It's no wonder Emacs
> is munching 50% CPU.
>
> Any idea why that can be happening?

Probably a bug in sys_select() in w32proc.c

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

* Re: 100% CPU on TCP servers
  2005-09-10  7:47   ` Jason Rumney
@ 2005-09-10 23:01     ` Kim F. Storm
  2005-10-12 15:07     ` Kim F. Storm
  1 sibling, 0 replies; 49+ messages in thread
From: Kim F. Storm @ 2005-09-10 23:01 UTC (permalink / raw)
  Cc: Juanma Barranquero, Emacs Devel

Jason Rumney <jasonr@gnu.org> writes:

> Juanma Barranquero <lekktu@gmail.com> writes:
>
>> (A question for process-savvy people)
>>
>> It seems like 
>>
>>>  (make-network-process :name "test" :server t :service t)
>>
>> on Windows makes the server process to call server_accept_connection()
>> continuously (in a 2.8 GHz Pentium IV I've measured around 10,200
>> calls in 3,5 s, almost 2,900 calls per second). It's no wonder Emacs
>> is munching 50% CPU.
>>
>> Any idea why that can be happening?
>
> Probably a bug in sys_select() in w32proc.c

Sounds like it, indeed!

Juanma or Jason, could you try to single step through it to see why
it fails to wait on the server socket...

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers
  2005-09-10  7:47   ` Jason Rumney
  2005-09-10 23:01     ` Kim F. Storm
@ 2005-10-12 15:07     ` Kim F. Storm
  2005-10-12 22:42       ` Juanma Barranquero
  1 sibling, 1 reply; 49+ messages in thread
From: Kim F. Storm @ 2005-10-12 15:07 UTC (permalink / raw)
  Cc: Juanma Barranquero, Emacs Devel

Jason Rumney <jasonr@gnu.org> writes:

> Juanma Barranquero <lekktu@gmail.com> writes:
>
>> (A question for process-savvy people)
>>
>> It seems like 
>>
>>>  (make-network-process :name "test" :server t :service t)
>>
>> on Windows makes the server process to call server_accept_connection()
>> continuously (in a 2.8 GHz Pentium IV I've measured around 10,200
>> calls in 3,5 s, almost 2,900 calls per second). It's no wonder Emacs
>> is munching 50% CPU.
>>
>> Any idea why that can be happening?
>
> Probably a bug in sys_select() in w32proc.c

I investigate it a little bit and found that it seems that w32 server
sockets must use WSAAsyncSelect + FD_ACCEPT to request notifications
of incoming connections -- but exactly how that is done is not for me
to look at...

In its current form, it sys_select says the socket is ready, so we
call server_accept_connection which again calls accept() which returns
-1 with errno == WSAEWOULDBLOCK (10035) indicating that there is no
pending connection to accept.

Can somebody pls. look into doing this the right way?


-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers
  2005-10-12 15:07     ` Kim F. Storm
@ 2005-10-12 22:42       ` Juanma Barranquero
  0 siblings, 0 replies; 49+ messages in thread
From: Juanma Barranquero @ 2005-10-12 22:42 UTC (permalink / raw)
  Cc: Emacs Devel, Jason Rumney

On 10/12/05, Kim F. Storm <storm@cua.dk> wrote:

> Can somebody pls. look into doing this the right way?

I won't be able for the next several weeks. I'm moving in three days
and it'll take a while to settle.

--
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers  (on Windoze).
  2005-08-18 15:51 ` Juanma Barranquero
  2005-09-09 12:53   ` Kim F. Storm
  2005-09-10  7:47   ` Jason Rumney
@ 2006-07-13 22:35   ` Kim F. Storm
  2006-07-14  8:15     ` Jason Rumney
  2006-07-14  9:51     ` Jason Rumney
  2 siblings, 2 replies; 49+ messages in thread
From: Kim F. Storm @ 2006-07-13 22:35 UTC (permalink / raw)
  Cc: Emacs Devel

Juanma Barranquero <lekktu@gmail.com> writes:

> (A question for process-savvy people)
>
> It seems like 
>
>>  (make-network-process :name "test" :server t :service t)
>
> on Windows makes the server process to call server_accept_connection()
> continuously (in a 2.8 GHz Pentium IV I've measured around 10,200
> calls in 3,5 s, almost 2,900 calls per second). It's no wonder Emacs
> is munching 50% CPU.
>
> Any idea why that can be happening?

I took a look at this issue, and it seems quite trivial to fix.

Would someone try to apply the following patch and tell me whether
it makes a difference  (pls. try the above example before and after
applying the patch).  If it doesn't compile, pls try to fix it!!

I don't quite understand the pfn_ stuff in w32.c -- maybe the
WSAEventSelect function need to be loaded in the same way to be
available.  Someone who knows this stuff, please DTRT.

Of course, it would be great if you could actually try to connect
to the server socket to see if it can really accept the connection
and do something useful with it.

*** w32.h	06 Feb 2006 18:21:50 +0100	1.19
--- w32.h	14 Jul 2006 00:09:55 +0200	
***************
*** 93,98 ****
--- 93,99 ----
  /* fd_info flag definitions */
  #define FILE_READ               0x0001
  #define FILE_WRITE              0x0002
+ #define FILE_LISTEN		0x0004
  #define FILE_BINARY             0x0010
  #define FILE_LAST_CR            0x0020
  #define FILE_AT_EOF             0x0040


*** w32.c	20 May 2006 22:52:11 +0200	1.102
--- w32.c	14 Jul 2006 00:25:21 +0200	
***************
*** 3295,3300 ****
--- 3295,3305 ----
        int rc = pfn_listen (SOCK_HANDLE (s), backlog);
        if (rc == SOCKET_ERROR)
  	set_errno ();
+       else
+ 	{
+ 	  fd_info[s].flags |= FILE_LISTEN;
+ 	  WSAEventSelect (SOCK_HANDLE (s), fd_info[s].cp->char_avail, FD_ACCEPT);
+ 	}
        return rc;
      }
    h_errno = ENOTSOCK;
***************
*** 3332,3342 ****
      }
  
    check_errno ();
!   if (fd_info[s].flags & FILE_SOCKET)
      {
        SOCKET t = pfn_accept (SOCK_HANDLE (s), addr, addrlen);
        if (t != INVALID_SOCKET)
! 	return socket_to_fd (t);
  
        set_errno ();
        return -1;
--- 3337,3352 ----
      }
  
    check_errno ();
!   if (fd_info[s].flags & FILE_LISTEN)
      {
        SOCKET t = pfn_accept (SOCK_HANDLE (s), addr, addrlen);
        if (t != INVALID_SOCKET)
! 	{
! 	  int fd = socket_to_fd (t);
! 	  if (fd >= 0)
! 	    WSAEventSelect (SOCK_HANDLE (fd), fd_info[fd].cp->char_avail, FD_READ | FD_CLOSE);
! 	  return fd;
! 	}
  
        set_errno ();
        return -1;

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers  (on Windoze).
  2006-07-13 22:35   ` 100% CPU on TCP servers (on Windoze) Kim F. Storm
@ 2006-07-14  8:15     ` Jason Rumney
  2006-07-14  9:54       ` Kim F. Storm
  2006-07-14  9:51     ` Jason Rumney
  1 sibling, 1 reply; 49+ messages in thread
From: Jason Rumney @ 2006-07-14  8:15 UTC (permalink / raw)
  Cc: Juanma Barranquero, Emacs Devel

Kim F. Storm wrote:
> I don't quite understand the pfn_ stuff in w32.c -- maybe the
> WSAEventSelect function need to be loaded in the same way to be
> available.  Someone who knows this stuff, please DTRT.
>   
The dynamic loading of network functions is obsolete. The original idea 
was to support versions of Windows that do not contain the Winsock 
library by default. Since NT 3.51, it has been included by default 
(prior to that it was an optional component), and since at least Emacs 
20 we gave up trying to support such old versions of Windows NT, since 
Windows NT was not widely used until 4.0, and any NT 3.1 or 3.5 
installations have probably been replaced by now.

So this can probably be cleaned up by using those functions normally.

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

* Re: 100% CPU on TCP servers  (on Windoze).
  2006-07-13 22:35   ` 100% CPU on TCP servers (on Windoze) Kim F. Storm
  2006-07-14  8:15     ` Jason Rumney
@ 2006-07-14  9:51     ` Jason Rumney
  2006-07-14 10:23       ` Kim F. Storm
  1 sibling, 1 reply; 49+ messages in thread
From: Jason Rumney @ 2006-07-14  9:51 UTC (permalink / raw)
  Cc: Juanma Barranquero, Emacs Devel

Kim F. Storm wrote:
>>>  (make-network-process :name "test" :server t :service t)
>>>       
> I took a look at this issue, and it seems quite trivial to fix.
>
> Would someone try to apply the following patch and tell me whether
> it makes a difference  (pls. try the above example before and after
> applying the patch).  If it doesn't compile, pls try to fix it!!
>   
Before your patch, the example works, but uses 50% CPU. I confirmed it 
worked by connecting to the socket and sending data to Emacs.

After your patch, and some additional patching to dynamically load 
WSAEventSelect (the build process needs changing to eliminate this 
requirement), the example fails with the following stack trace:

Debugger entered--Lisp error: (file-error "make server process failed" 
"invalid argument" :name "test" :server t :service t)
  make-network-process(:name "test" :server t :service t)
  eval((make-network-process :name "test" :server t :service t))
  eval-last-sexp-1(t)
  eval-last-sexp(t)
  eval-print-last-sexp()
  call-interactively(eval-print-last-sexp)

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

* Re: 100% CPU on TCP servers  (on Windoze).
  2006-07-14  8:15     ` Jason Rumney
@ 2006-07-14  9:54       ` Kim F. Storm
  2006-07-14 10:54         ` Juanma Barranquero
  0 siblings, 1 reply; 49+ messages in thread
From: Kim F. Storm @ 2006-07-14  9:54 UTC (permalink / raw)
  Cc: Juanma Barranquero, Emacs Devel

Jason Rumney <jasonr@gnu.org> writes:

> Kim F. Storm wrote:
>> I don't quite understand the pfn_ stuff in w32.c -- maybe the
>> WSAEventSelect function need to be loaded in the same way to be
>> available.  Someone who knows this stuff, please DTRT.
>>   
> The dynamic loading of network functions is obsolete. The original
> idea was to support versions of Windows that do not contain the
> Winsock library by default. Since NT 3.51, it has been included by
> default (prior to that it was an optional component), and since at
> least Emacs 20 we gave up trying to support such old versions of
> Windows NT, since Windows NT was not widely used until 4.0, and any NT
> 3.1 or 3.5 installations have probably been replaced by now.
>
> So this can probably be cleaned up by using those functions normally.

I found a Windoze system where I could build emacs, and it didn't
like properly becuase WSAEventSelect could not be found by the linker.

Then I tried to load it dynamically like the other pfn_ stuff,
and with that change it linked and seemed to run perfectly
as I thought it would.

So I have installed the changes, and now server sockets seem
to behave just fine.

Now, maybe someone would like to make emacsclient and server.el
work on Windoze.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers  (on Windoze).
  2006-07-14  9:51     ` Jason Rumney
@ 2006-07-14 10:23       ` Kim F. Storm
  2006-07-14 10:43         ` Jason Rumney
  2006-07-14 10:50         ` Juanma Barranquero
  0 siblings, 2 replies; 49+ messages in thread
From: Kim F. Storm @ 2006-07-14 10:23 UTC (permalink / raw)
  Cc: Juanma Barranquero, Emacs Devel

Jason Rumney <jasonr@gnu.org> writes:

> Kim F. Storm wrote:
>>>>  (make-network-process :name "test" :server t :service t)
>>>>       
>> I took a look at this issue, and it seems quite trivial to fix.
>>
>> Would someone try to apply the following patch and tell me whether
>> it makes a difference  (pls. try the above example before and after
>> applying the patch).  If it doesn't compile, pls try to fix it!!
>>   
> Before your patch, the example works, but uses 50% CPU. I confirmed it
> worked by connecting to the socket and sending data to Emacs.
>
> After your patch, and some additional patching to dynamically load
> WSAEventSelect (the build process needs changing to eliminate this
> requirement), the example fails with the following stack trace:
>
> Debugger entered--Lisp error: (file-error "make server process failed"
> "invalid argument" :name "test" :server t :service t)
>  make-network-process(:name "test" :server t :service t)
>  eval((make-network-process :name "test" :server t :service t))
>  eval-last-sexp-1(t)
>  eval-last-sexp(t)
>  eval-print-last-sexp()
>  call-interactively(eval-print-last-sexp)

Strange -- it works fine when I try it (with the version I 
checked into CVS).

Can you pls. try with that version.


-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers  (on Windoze).
  2006-07-14 10:23       ` Kim F. Storm
@ 2006-07-14 10:43         ` Jason Rumney
  2006-07-14 11:14           ` Eli Zaretskii
  2006-07-14 10:50         ` Juanma Barranquero
  1 sibling, 1 reply; 49+ messages in thread
From: Jason Rumney @ 2006-07-14 10:43 UTC (permalink / raw)
  Cc: Juanma Barranquero, Emacs Devel

Kim F. Storm wrote:
>> After your patch, and some additional patching to dynamically load
>> WSAEventSelect (the build process needs changing to eliminate this
>> requirement), the example fails with the following stack trace:
>>
>> Debugger entered--Lisp error: (file-error "make server process failed"
>> "invalid argument" :name "test" :server t :service t)
>>  make-network-process(:name "test" :server t :service t)
>>  eval((make-network-process :name "test" :server t :service t))
>>  eval-last-sexp-1(t)
>>  eval-last-sexp(t)
>>  eval-print-last-sexp()
>>  call-interactively(eval-print-last-sexp)
>>     
>
> Strange -- it works fine when I try it (with the version I 
> checked into CVS).
>
> Can you pls. try with that version.
>   
I get the same results with your version (which differs from mine only 
in the position of two lines defining and loading pfn_WSAEventService).

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 10:23       ` Kim F. Storm
  2006-07-14 10:43         ` Jason Rumney
@ 2006-07-14 10:50         ` Juanma Barranquero
  2006-07-14 11:16           ` Kim F. Storm
  1 sibling, 1 reply; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-14 10:50 UTC (permalink / raw)


On 7/14/06, Kim F. Storm <storm@cua.dk> wrote:

> Can you pls. try with that version.

ELISP> (make-network-process :name "test" :server t :service t)
*** Eval error ***  make server process failed: invalid argument,
:name, test, :server, t, :service, t
ELISP>

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14  9:54       ` Kim F. Storm
@ 2006-07-14 10:54         ` Juanma Barranquero
  0 siblings, 0 replies; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-14 10:54 UTC (permalink / raw)
  Cc: Emacs Devel, Jason Rumney

On 7/14/06, Kim F. Storm <storm@cua.dk> wrote:

> Now, maybe someone would like to make emacsclient and server.el
> work on Windoze.

I did some work on this, which I left aside because of the 100% CPU
bug. I'd be willing to continue with it (assuming the bug is fixed),
but I cannot promise I won't miss the "start of the pretesting"
deadline, if it is that imminent as it does appear.

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers  (on Windoze).
  2006-07-14 10:43         ` Jason Rumney
@ 2006-07-14 11:14           ` Eli Zaretskii
  0 siblings, 0 replies; 49+ messages in thread
From: Eli Zaretskii @ 2006-07-14 11:14 UTC (permalink / raw)
  Cc: lekktu, emacs-devel, storm

> Date: Fri, 14 Jul 2006 11:43:00 +0100
> From: Jason Rumney <jasonr@gnu.org>
> Cc: Juanma Barranquero <lekktu@gmail.com>, Emacs Devel <emacs-devel@gnu.org>
> 
> Kim F. Storm wrote:
> >> After your patch, and some additional patching to dynamically load
> >> WSAEventSelect (the build process needs changing to eliminate this
> >> requirement), the example fails with the following stack trace:
> >>
> >> Debugger entered--Lisp error: (file-error "make server process failed"
> >> "invalid argument" :name "test" :server t :service t)
> >>  make-network-process(:name "test" :server t :service t)
> >>  eval((make-network-process :name "test" :server t :service t))
> >>  eval-last-sexp-1(t)
> >>  eval-last-sexp(t)
> >>  eval-print-last-sexp()
> >>  call-interactively(eval-print-last-sexp)
> >>     
> >
> > Strange -- it works fine when I try it (with the version I 
> > checked into CVS).
> >
> > Can you pls. try with that version.
> >   
> I get the same results with your version

Same here.

Kim, could you please confirm that you used the precise recipe posted
by Juanma, viz.:

  (make-network-process :name "test" :server t :service t)

I fired up "emacs -q", typed this line into *scratch", then typed C-j
after the right paren.  Is that what you did?

If you did exactly that, please tell the details about the system
where you tested (the version of the OS, at the very least).

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 10:50         ` Juanma Barranquero
@ 2006-07-14 11:16           ` Kim F. Storm
  2006-07-14 11:42             ` Kim F. Storm
  0 siblings, 1 reply; 49+ messages in thread
From: Kim F. Storm @ 2006-07-14 11:16 UTC (permalink / raw)
  Cc: Emacs Devel

"Juanma Barranquero" <lekktu@gmail.com> writes:

> On 7/14/06, Kim F. Storm <storm@cua.dk> wrote:
>
>> Can you pls. try with that version.
>
> ELISP> (make-network-process :name "test" :server t :service t)
> *** Eval error ***  make server process failed: invalid argument,
> :name, test, :server, t, :service, t
> ELISP>

I don't know what happened (except that maybe I was starting the
wrong binary) -- but I see the error too now.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 11:16           ` Kim F. Storm
@ 2006-07-14 11:42             ` Kim F. Storm
  2006-07-14 12:27               ` Juanma Barranquero
  0 siblings, 1 reply; 49+ messages in thread
From: Kim F. Storm @ 2006-07-14 11:42 UTC (permalink / raw)
  Cc: Emacs Devel

storm@cua.dk (Kim F. Storm) writes:

> "Juanma Barranquero" <lekktu@gmail.com> writes:
>
>> On 7/14/06, Kim F. Storm <storm@cua.dk> wrote:
>>
>>> Can you pls. try with that version.
>>
>> ELISP> (make-network-process :name "test" :server t :service t)
>> *** Eval error ***  make server process failed: invalid argument,
>> :name, test, :server, t, :service, t
>> ELISP>
>
> I don't know what happened (except that maybe I was starting the
> wrong binary) -- but I see the error too now.

Well, it is LOAD_PROC (WSAEventSelect) which fails -- and then
disables winsock support, so any socket() call fails.

Any idea how to fix that?

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 11:42             ` Kim F. Storm
@ 2006-07-14 12:27               ` Juanma Barranquero
  2006-07-14 13:08                 ` Eli Zaretskii
  2006-07-14 13:24                 ` Kim F. Storm
  0 siblings, 2 replies; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-14 12:27 UTC (permalink / raw)
  Cc: Emacs Devel

On 7/14/06, Kim F. Storm <storm@cua.dk> wrote:

> Any idea how to fix that?

You can make it work with the attached patch. Apparently,
WSAEventSelect is exported from ws2_32.dll but not from wsock32.dll. I
don't know whether all targets (I mean, all supported Windows
environments) have or use ws2_32.dll, though.

Unfortunately, with your patch and the attached one, I still see a 50%
CPU use on the reported example.

-- 
                    /L/e/k/t/u


Index: src/w32.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32.c,v
retrieving revision 1.103
diff -u -2 -r1.103 w32.c
--- src/w32.c   14 Jul 2006 09:29:32 -0000      1.103
+++ src/w32.c   14 Jul 2006 12:22:29 -0000
@@ -2771,5 +2771,5 @@
                               "SetHandleInformation");

-  winsock_lib = LoadLibrary ("wsock32.dll");
+  winsock_lib = LoadLibrary ("ws2_32.dll");

   if (winsock_lib != NULL)

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 12:27               ` Juanma Barranquero
@ 2006-07-14 13:08                 ` Eli Zaretskii
  2006-07-14 13:59                   ` Jason Rumney
  2006-07-14 13:24                 ` Kim F. Storm
  1 sibling, 1 reply; 49+ messages in thread
From: Eli Zaretskii @ 2006-07-14 13:08 UTC (permalink / raw)
  Cc: emacs-devel

> Date: Fri, 14 Jul 2006 14:27:27 +0200
> From: "Juanma Barranquero" <lekktu@gmail.com>
> Cc: Emacs Devel <emacs-devel@gnu.org>
> 
> I don't know whether all targets (I mean, all supported Windows
> environments) have or use ws2_32.dll, though.

Jason, can you comment on using wsock32.dll vs ws2_32.dll?  Thanks.

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 12:27               ` Juanma Barranquero
  2006-07-14 13:08                 ` Eli Zaretskii
@ 2006-07-14 13:24                 ` Kim F. Storm
  2006-07-14 13:40                   ` Eli Zaretskii
  2006-07-14 15:28                   ` Juanma Barranquero
  1 sibling, 2 replies; 49+ messages in thread
From: Kim F. Storm @ 2006-07-14 13:24 UTC (permalink / raw)
  Cc: Emacs Devel

"Juanma Barranquero" <lekktu@gmail.com> writes:

> On 7/14/06, Kim F. Storm <storm@cua.dk> wrote:
>
>> Any idea how to fix that?
>
> You can make it work with the attached patch. Apparently,
> WSAEventSelect is exported from ws2_32.dll but not from wsock32.dll. I
> don't know whether all targets (I mean, all supported Windows
> environments) have or use ws2_32.dll, though.
>
> Unfortunately, with your patch and the attached one, I still see a 50%
> CPU use on the reported example.

Thanks.  Here is something which actually seems to work -- provided
we can use ws2_32.dll:

Index: w32.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32.c,v
retrieving revision 1.103
diff -c -r1.103 w32.c
*** w32.c	14 Jul 2006 09:29:32 -0000	1.103
--- w32.c	14 Jul 2006 13:25:07 -0000
***************
*** 2701,2706 ****
--- 2701,2708 ----
  void (PASCAL *pfn_WSASetLastError) (int iError);
  int (PASCAL *pfn_WSAGetLastError) (void);
  int (PASCAL *pfn_WSAEventSelect) (SOCKET s, HANDLE hEventObject, long lNetworkEvents);
+ HANDLE (PASCAL *pfn_WSACreateEvent) (void);
+ int (PASCAL *pfn_WSACloseEvent) (HANDLE hEvent);
  int (PASCAL *pfn_socket) (int af, int type, int protocol);
  int (PASCAL *pfn_bind) (SOCKET s, const struct sockaddr *addr, int namelen);
  int (PASCAL *pfn_connect) (SOCKET s, const struct sockaddr *addr, int namelen);
***************
*** 2770,2776 ****
      = (void *) GetProcAddress (GetModuleHandle ("kernel32.dll"),
  			       "SetHandleInformation");
  
!   winsock_lib = LoadLibrary ("wsock32.dll");
  
    if (winsock_lib != NULL)
      {
--- 2772,2778 ----
      = (void *) GetProcAddress (GetModuleHandle ("kernel32.dll"),
  			       "SetHandleInformation");
  
!   winsock_lib = LoadLibrary ("Ws2_32.dll");
  
    if (winsock_lib != NULL)
      {
***************
*** 2784,2789 ****
--- 2786,2793 ----
        LOAD_PROC( WSASetLastError );
        LOAD_PROC( WSAGetLastError );
        LOAD_PROC( WSAEventSelect );
+       LOAD_PROC( WSACreateEvent );
+       LOAD_PROC( WSACloseEvent );
        LOAD_PROC( socket );
        LOAD_PROC( bind );
        LOAD_PROC( connect );
***************
*** 3298,3307 ****
        if (rc == SOCKET_ERROR)
  	set_errno ();
        else
! 	{
! 	  fd_info[s].flags |= FILE_LISTEN;
! 	  pfn_WSAEventSelect (SOCK_HANDLE (s), fd_info[s].cp->char_avail, FD_ACCEPT);
! 	}
        return rc;
      }
    h_errno = ENOTSOCK;
--- 3302,3308 ----
        if (rc == SOCKET_ERROR)
  	set_errno ();
        else
! 	fd_info[s].flags |= FILE_LISTEN;
        return rc;
      }
    h_errno = ENOTSOCK;
***************
*** 3342,3357 ****
    if (fd_info[s].flags & FILE_LISTEN)
      {
        SOCKET t = pfn_accept (SOCK_HANDLE (s), addr, addrlen);
!       if (t != INVALID_SOCKET)
! 	{
! 	  int fd = socket_to_fd (t);
! 	  if (fd >= 0)
! 	    pfn_WSAEventSelect (SOCK_HANDLE (fd), fd_info[fd].cp->char_avail, FD_READ | FD_CLOSE);
! 	  return fd;
! 	}
  
!       set_errno ();
!       return -1;
      }
    h_errno = ENOTSOCK;
    return -1;
--- 3343,3357 ----
    if (fd_info[s].flags & FILE_LISTEN)
      {
        SOCKET t = pfn_accept (SOCK_HANDLE (s), addr, addrlen);
!       int fd = -1;
!       if (t == INVALID_SOCKET)
! 	set_errno ();
!       else
! 	fd = socket_to_fd (t);
  
!       fd_info[s].cp->status = STATUS_READ_ACKNOWLEDGED;
!       ResetEvent (fd_info[s].cp->char_avail);
!       return fd;
      }
    h_errno = ENOTSOCK;
    return -1;
***************
*** 3653,3658 ****
--- 3653,3688 ----
    return cp->status;
  }
  
+ int _sys_wait_accept (int fd)
+ {
+   HANDLE hEv;
+   child_process * cp;
+   int rc;
+ 
+   if (fd < 0 || fd >= MAXDESC)
+     return STATUS_READ_ERROR;
+ 
+   cp = fd_info[fd].cp;
+ 
+   if (cp == NULL || cp->fd != fd || cp->status != STATUS_READ_READY)
+     return STATUS_READ_ERROR;
+ 
+   cp->status = STATUS_READ_FAILED;
+ 
+   hEv = pfn_WSACreateEvent ();
+   rc = pfn_WSAEventSelect (SOCK_HANDLE (fd), hEv, FD_ACCEPT);
+   if (rc != SOCKET_ERROR)
+     {
+       rc = WaitForSingleObject (hEv, INFINITE);
+       pfn_WSAEventSelect (SOCK_HANDLE (fd), NULL, 0);
+       pfn_WSACloseEvent (hEv);
+       if (rc == WAIT_OBJECT_0)
+ 	cp->status = STATUS_READ_SUCCEEDED;
+     }
+ 
+   return cp->status;
+ }
+ 
  int
  sys_read (int fd, char * buffer, unsigned int count)
  {
Index: w32.h
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32.h,v
retrieving revision 1.20
diff -c -r1.20 w32.h
*** w32.h	14 Jul 2006 09:29:22 -0000	1.20
--- w32.h	14 Jul 2006 13:24:48 -0000
***************
*** 137,142 ****
--- 137,145 ----
  extern void globals_of_w32menu (void);
  extern void syms_of_fontset (void);
  
+ extern int _sys_read_ahead (int fd);
+ extern int _sys_wait_accept (int fd);
+ 
  #endif /* EMACS_W32_H */
  
  /* arch-tag: 02c36b00-312b-4c4d-a1d9-f905c5e968f0
Index: w32proc.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32proc.c,v
retrieving revision 1.66
diff -c -r1.66 w32proc.c
*** w32proc.c	6 Feb 2006 15:23:22 -0000	1.66
--- w32proc.c	14 Jul 2006 13:23:28 -0000
***************
*** 1,6 ****
  /* Process support for GNU Emacs on the Microsoft W32 API.
     Copyright (C) 1992, 1995, 1999, 2000, 2001, 2002, 2003, 2004,
!                  2005, 2006 Free Software Foundation, Inc.
  
  This file is part of GNU Emacs.
  
--- 1,6 ----
  /* Process support for GNU Emacs on the Microsoft W32 API.
     Copyright (C) 1992, 1995, 1999, 2000, 2001, 2002, 2003, 2004,
! 		 2005, 2006 Free Software Foundation, Inc.
  
  This file is part of GNU Emacs.
  
***************
*** 280,286 ****
      {
        int rc;
  
!       rc = _sys_read_ahead (cp->fd);
  
        /* The name char_avail is a misnomer - it really just means the
  	 read-ahead has completed, whether successfully or not. */
--- 280,289 ----
      {
        int rc;
  
!       if (fd_info[cp->fd].flags & FILE_LISTEN)
! 	rc = _sys_wait_accept (cp->fd);
!       else
! 	rc = _sys_read_ahead (cp->fd);
  
        /* The name char_avail is a misnomer - it really just means the
  	 read-ahead has completed, whether successfully or not. */

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 13:24                 ` Kim F. Storm
@ 2006-07-14 13:40                   ` Eli Zaretskii
  2006-07-14 14:04                     ` Kim F. Storm
  2006-07-14 15:28                   ` Juanma Barranquero
  1 sibling, 1 reply; 49+ messages in thread
From: Eli Zaretskii @ 2006-07-14 13:40 UTC (permalink / raw)
  Cc: lekktu, emacs-devel

> From: storm@cua.dk (Kim F. Storm)
> Date: Fri, 14 Jul 2006 15:24:23 +0200
> Cc: Emacs Devel <emacs-devel@gnu.org>
> 
> Here is something which actually seems to work -- provided
> we can use ws2_32.dll:

We could test that dynamically: if LoadLibrary fails for ws2_32.dll,
fall back on wsock32.dll, and use the old code.  The rest of the code
can test if pfn_WSAEventSelect and pfn_WSACreateEvent are non-NULL to
DTRT.

I asked Jason to comment on this, let's wait for his response.

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 13:08                 ` Eli Zaretskii
@ 2006-07-14 13:59                   ` Jason Rumney
  2006-07-14 14:22                     ` Kim F. Storm
  2006-07-14 15:43                     ` Stuart D. Herring
  0 siblings, 2 replies; 49+ messages in thread
From: Jason Rumney @ 2006-07-14 13:59 UTC (permalink / raw)
  Cc: Juanma Barranquero, emacs-devel

Eli Zaretskii wrote:
> Jason, can you comment on using wsock32.dll vs ws2_32.dll?  Thanks.

It looks like all versions of Windows since NT 3.51 and Windows 95 come 
with ws2_32.dll, so there is no longer a need for us to use wsock32.dll 
since we haven't supported NT versions prior to 3.51 for some time.

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 13:40                   ` Eli Zaretskii
@ 2006-07-14 14:04                     ` Kim F. Storm
  0 siblings, 0 replies; 49+ messages in thread
From: Kim F. Storm @ 2006-07-14 14:04 UTC (permalink / raw)
  Cc: lekktu, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> I asked Jason to comment on this, let's wait for his response.

MSDN says that WSAEventSelect is in ws2_32.dll -- and that it is
supported since Windows 95 (but only if you install the Windows Socket
2 update, still available a M$ support web).

Do we need to care about Windows 95 which are not "up to date"?

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 13:59                   ` Jason Rumney
@ 2006-07-14 14:22                     ` Kim F. Storm
  2006-07-14 14:41                       ` Jason Rumney
  2006-07-14 17:29                       ` Eli Zaretskii
  2006-07-14 15:43                     ` Stuart D. Herring
  1 sibling, 2 replies; 49+ messages in thread
From: Kim F. Storm @ 2006-07-14 14:22 UTC (permalink / raw)
  Cc: Juanma Barranquero, Eli Zaretskii, emacs-devel

Jason Rumney <jasonr@gnu.org> writes:

> Eli Zaretskii wrote:
>> Jason, can you comment on using wsock32.dll vs ws2_32.dll?  Thanks.
>
> It looks like all versions of Windows since NT 3.51 and Windows 95
> come with ws2_32.dll, so there is no longer a need for us to use
> wsock32.dll since we haven't supported NT versions prior to 3.51 for
> some time.

Sounds good!

I have installed the new patch.


Maybe we should a notice somewhere:

** Windows 95 and networking.

To use Emacs' networking features on Windows 95, you must install the
"Windows Socket 2" update available from MicroSoft's support Web.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 14:22                     ` Kim F. Storm
@ 2006-07-14 14:41                       ` Jason Rumney
  2006-07-14 17:29                       ` Eli Zaretskii
  1 sibling, 0 replies; 49+ messages in thread
From: Jason Rumney @ 2006-07-14 14:41 UTC (permalink / raw)
  Cc: Juanma Barranquero, Eli Zaretskii, emacs-devel

Kim F. Storm wrote:
> Maybe we should a notice somewhere:
>
> ** Windows 95 and networking.
>
> To use Emacs' networking features on Windows 95, you must install the
> "Windows Socket 2" update available from MicroSoft's support Web.
>
>   
Yes, that seems a good idea. PROBLEMS and/or NEWS are probably 
appropriate values for "somewhere". My guess is that if Windows 95 users 
still exist then they probably already have that (I am sure it will have 
been included with some version of Internet Explorer for example, 
probably 4.0), but a note in PROBLEMS should cover it just in case.

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 13:24                 ` Kim F. Storm
  2006-07-14 13:40                   ` Eli Zaretskii
@ 2006-07-14 15:28                   ` Juanma Barranquero
  2006-07-14 22:07                     ` Kim F. Storm
  1 sibling, 1 reply; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-14 15:28 UTC (permalink / raw)


On 7/14/06, Kim F. Storm <storm@cua.dk> wrote:

> Thanks.  Here is something which actually seems to work -- provided
> we can use ws2_32.dll:

Yeah, it (apparently) works! Great!

I'll dig the old server.el/emacsclient.c code and the thread to see
what's left to do. IIRC, I had it mostly working, but I had gotten rid
of the Unix socket stuff, and someone (Stefan, perhaps?) asked for it
to be kept.

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 13:59                   ` Jason Rumney
  2006-07-14 14:22                     ` Kim F. Storm
@ 2006-07-14 15:43                     ` Stuart D. Herring
  1 sibling, 0 replies; 49+ messages in thread
From: Stuart D. Herring @ 2006-07-14 15:43 UTC (permalink / raw)
  Cc: emacs-devel

> It looks like all versions of Windows since NT 3.51 and Windows 95 come
> with ws2_32.dll, so there is no longer a need for us to use wsock32.dll
> since we haven't supported NT versions prior to 3.51 for some time.

Original versions of Windows 95 didn't have ws2_32.dll, but it was
compatible: you could get it (from Microsoft, at no cost) and it worked
(and many other networking applications need it).  Since Windows 98 (and
whatever version of NT) it's been standard.

Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 14:22                     ` Kim F. Storm
  2006-07-14 14:41                       ` Jason Rumney
@ 2006-07-14 17:29                       ` Eli Zaretskii
  2006-07-14 18:12                         ` Stefan Monnier
  1 sibling, 1 reply; 49+ messages in thread
From: Eli Zaretskii @ 2006-07-14 17:29 UTC (permalink / raw)
  Cc: lekktu, emacs-devel, jasonr

> Cc: Eli Zaretskii <eliz@gnu.org>,  Juanma Barranquero <lekktu@gmail.com>,
> 	  emacs-devel@gnu.org
> From: storm@cua.dk (Kim F. Storm)
> Date: Fri, 14 Jul 2006 16:22:21 +0200
> 
> I have installed the new patch.

Thanks.

> Maybe we should a notice somewhere:
> 
> ** Windows 95 and networking.
> 
> To use Emacs' networking features on Windows 95, you must install the
> "Windows Socket 2" update available from MicroSoft's support Web.

A good idea, IMO.

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 17:29                       ` Eli Zaretskii
@ 2006-07-14 18:12                         ` Stefan Monnier
  0 siblings, 0 replies; 49+ messages in thread
From: Stefan Monnier @ 2006-07-14 18:12 UTC (permalink / raw)
  Cc: lekktu, emacs-devel, jasonr, Kim F. Storm

>> Cc: Eli Zaretskii <eliz@gnu.org>,  Juanma Barranquero <lekktu@gmail.com>,
>> emacs-devel@gnu.org
>> From: storm@cua.dk (Kim F. Storm)
>> Date: Fri, 14 Jul 2006 16:22:21 +0200
>> 
>> I have installed the new patch.

> Thanks.

>> Maybe we should a notice somewhere:
>> 
>> ** Windows 95 and networking.
>> 
>> To use Emacs' networking features on Windows 95, you must install the
>> "Windows Socket 2" update available from MicroSoft's support Web.

> A good idea, IMO.

If we can signal an error at the point of use, then we can include this info
in the error message.


        Stefan

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 15:28                   ` Juanma Barranquero
@ 2006-07-14 22:07                     ` Kim F. Storm
  2006-07-14 23:23                       ` Juanma Barranquero
  0 siblings, 1 reply; 49+ messages in thread
From: Kim F. Storm @ 2006-07-14 22:07 UTC (permalink / raw)
  Cc: Emacs Devel

"Juanma Barranquero" <lekktu@gmail.com> writes:

> On 7/14/06, Kim F. Storm <storm@cua.dk> wrote:
>
>> Thanks.  Here is something which actually seems to work -- provided
>> we can use ws2_32.dll:
>
> Yeah, it (apparently) works! Great!
>
> I'll dig the old server.el/emacsclient.c code and the thread to see
> what's left to do. IIRC, I had it mostly working, but I had gotten rid
> of the Unix socket stuff, and someone (Stefan, perhaps?) asked for it
> to be kept.

You can use (featurep 'make-network-process '(:family local)) to see
if unix sockets are available -- use them if available, otherwise
switch to TCP or UDP, and save the server's port number in a file.

Likewise in emacsclient, first try to see if the unix socket file
is present -- if not, look for a file containing the local port number
for the server.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 22:07                     ` Kim F. Storm
@ 2006-07-14 23:23                       ` Juanma Barranquero
  2006-07-15  0:50                         ` Kim F. Storm
  2006-07-15  2:04                         ` Stefan Monnier
  0 siblings, 2 replies; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-14 23:23 UTC (permalink / raw)
  Cc: Emacs Devel

On 7/15/06, Kim F. Storm <storm@cua.dk> wrote:

> You can use (featurep 'make-network-process '(:family local)) to see
> if unix sockets are available -- use them if available,

Wouldn't that preclude using emacsclient from a Windows machine to
connect to an Emacs running on GNU/Linux?

Many issues were already discussed in this (admittedly long) thread
from a year ago:

http://lists.gnu.org/archive/html/emacs-devel/2005-07/msg00913.html
http://lists.gnu.org/archive/html/emacs-devel/2005-08/msg00140.html

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 23:23                       ` Juanma Barranquero
@ 2006-07-15  0:50                         ` Kim F. Storm
  2006-07-15  2:09                           ` Juanma Barranquero
  2006-07-15  9:05                           ` Eli Zaretskii
  2006-07-15  2:04                         ` Stefan Monnier
  1 sibling, 2 replies; 49+ messages in thread
From: Kim F. Storm @ 2006-07-15  0:50 UTC (permalink / raw)
  Cc: Emacs Devel

"Juanma Barranquero" <lekktu@gmail.com> writes:

> On 7/15/06, Kim F. Storm <storm@cua.dk> wrote:
>
>> You can use (featurep 'make-network-process '(:family local)) to see
>> if unix sockets are available -- use them if available,
>
> Wouldn't that preclude using emacsclient from a Windows machine to
> connect to an Emacs running on GNU/Linux?

Yes, but for now I would be more than satisfied if we can just make it
work on the local system only -- that is what we have on GNU/Linux, so
Windows doesn't have to be more than that.  And doing more is opening
a can of worms,

>
> Many issues were already discussed in this (admittedly long) thread
> from a year ago:
>
> http://lists.gnu.org/archive/html/emacs-devel/2005-07/msg00913.html
> http://lists.gnu.org/archive/html/emacs-devel/2005-08/msg00140.html

I looked through those messages, and I don't see anything which
suggests that cross-system connections are to be considered at this
time.

Give it another shot (keeping AF_UNIX as primary choice, and using a
standard file name for the _local_ server file) and see what you can do.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-14 23:23                       ` Juanma Barranquero
  2006-07-15  0:50                         ` Kim F. Storm
@ 2006-07-15  2:04                         ` Stefan Monnier
  2006-07-15  2:11                           ` Juanma Barranquero
  1 sibling, 1 reply; 49+ messages in thread
From: Stefan Monnier @ 2006-07-15  2:04 UTC (permalink / raw)
  Cc: Emacs Devel, Kim F. Storm

>> You can use (featurep 'make-network-process '(:family local)) to see
>> if unix sockets are available -- use them if available,

> Wouldn't that preclude using emacsclient from a Windows machine to
> connect to an Emacs running on GNU/Linux?

Whether or not remote control is allowed (via a TCP port) should be
controlled by a variable.


        Stefan

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15  0:50                         ` Kim F. Storm
@ 2006-07-15  2:09                           ` Juanma Barranquero
  2006-07-15  9:05                           ` Eli Zaretskii
  1 sibling, 0 replies; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-15  2:09 UTC (permalink / raw)
  Cc: Emacs Devel

On 7/15/06, Kim F. Storm <storm@cua.dk> wrote:

> I looked through those messages, and I don't see anything which
> suggests that cross-system connections are to be considered at this
> time.

The sub-thread starting from

http://lists.gnu.org/archive/html/emacs-devel/2005-08/msg00356.html

refers to this specific issue, among others.

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15  2:04                         ` Stefan Monnier
@ 2006-07-15  2:11                           ` Juanma Barranquero
  2006-07-15 11:52                             ` Stefan Monnier
  0 siblings, 1 reply; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-15  2:11 UTC (permalink / raw)
  Cc: Emacs Devel, Kim F. Storm

On 7/15/06, Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> Whether or not remote control is allowed (via a TCP port) should be
> controlled by a variable.

That's what I'd like to do. And, in this case, using file sockets if
present (as Kim suggests) wouldn't work.

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15  0:50                         ` Kim F. Storm
  2006-07-15  2:09                           ` Juanma Barranquero
@ 2006-07-15  9:05                           ` Eli Zaretskii
  2006-07-15 13:54                             ` Juanma Barranquero
  2006-07-15 17:16                             ` Richard Stallman
  1 sibling, 2 replies; 49+ messages in thread
From: Eli Zaretskii @ 2006-07-15  9:05 UTC (permalink / raw)
  Cc: lekktu, emacs-devel

> From: storm@cua.dk (Kim F. Storm)
> Date: Sat, 15 Jul 2006 02:50:42 +0200
> Cc: Emacs Devel <emacs-devel@gnu.org>
> 
> "Juanma Barranquero" <lekktu@gmail.com> writes:
> 
> > On 7/15/06, Kim F. Storm <storm@cua.dk> wrote:
> >
> >> You can use (featurep 'make-network-process '(:family local)) to see
> >> if unix sockets are available -- use them if available,
> >
> > Wouldn't that preclude using emacsclient from a Windows machine to
> > connect to an Emacs running on GNU/Linux?
> 
> Yes, but for now I would be more than satisfied if we can just make it
> work on the local system only

Indeed.  And what's more, I'd be very uneasy about letting the server
accept connections from outside my machine, so if that is ever made a
possibility, I agree with Stefan that it should be an option.

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15  2:11                           ` Juanma Barranquero
@ 2006-07-15 11:52                             ` Stefan Monnier
  2006-07-15 13:50                               ` Juanma Barranquero
  0 siblings, 1 reply; 49+ messages in thread
From: Stefan Monnier @ 2006-07-15 11:52 UTC (permalink / raw)
  Cc: Emacs Devel, Kim F. Storm

>> Whether or not remote control is allowed (via a TCP port) should be
>> controlled by a variable.

> That's what I'd like to do. And, in this case, using file sockets if
> present (as Kim suggests) wouldn't work.

Huh?  I understand you can write the code in such a way that it wouldn't
work, but why would you since you can also write it in such a way that
it'll work.


        Stefan

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15 11:52                             ` Stefan Monnier
@ 2006-07-15 13:50                               ` Juanma Barranquero
  2006-07-15 14:58                                 ` Stefan Monnier
  0 siblings, 1 reply; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-15 13:50 UTC (permalink / raw)
  Cc: Emacs Devel, Kim F. Storm

On 7/15/06, Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> Huh?  I understand you can write the code in such a way that it wouldn't
> work, but why would you since you can also write it in such a way that
> it'll work.

AFAICS, Kim proposed that:

 - If the local system supports AF_UNIX sockets, use that;
 - If not, use AF_INET sockets

which wouldn't allow an Emacs running on GNU/Linux to accept
connections from a Windows machine (where AF_UNIX is not supported).

OTOH, I think it should be configurable, via an elisp or environment variable.

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15  9:05                           ` Eli Zaretskii
@ 2006-07-15 13:54                             ` Juanma Barranquero
  2006-07-15 14:59                               ` Stefan Monnier
  2006-07-15 17:16                             ` Richard Stallman
  1 sibling, 1 reply; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-15 13:54 UTC (permalink / raw)
  Cc: emacs-devel

On 7/15/06, Eli Zaretskii <eliz@gnu.org> wrote:

> Indeed.  And what's more, I'd be very uneasy about letting the server
> accept connections from outside my machine, so if that is ever made a
> possibility, I agree with Stefan that it should be an option.

The scheme I was thinking of implementing, proposed by Stefan the last
time around, would force the outside machine to have access to a
configuration file written by the server Emacs in order to know the
authentication key. So it's a matter of having the right permissions.
We're not talking about openly available TCP connections from some
arbitrary machine.

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15 13:50                               ` Juanma Barranquero
@ 2006-07-15 14:58                                 ` Stefan Monnier
  2006-07-15 15:24                                   ` Juanma Barranquero
  0 siblings, 1 reply; 49+ messages in thread
From: Stefan Monnier @ 2006-07-15 14:58 UTC (permalink / raw)
  Cc: Kim F. Storm, Emacs Devel

>> Huh?  I understand you can write the code in such a way that it wouldn't
>> work, but why would you since you can also write it in such a way that
>> it'll work.

> AFAICS, Kim proposed that:

> - If the local system supports AF_UNIX sockets, use that;
> - If not, use AF_INET sockets

That's for local connections.  If you want to allow remote connections, of
course you'll use a TCP socket either way (maybe additionally to a unix
socket).
I see no problem here.


        Stefan

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15 13:54                             ` Juanma Barranquero
@ 2006-07-15 14:59                               ` Stefan Monnier
  2006-07-15 15:30                                 ` Juanma Barranquero
  0 siblings, 1 reply; 49+ messages in thread
From: Stefan Monnier @ 2006-07-15 14:59 UTC (permalink / raw)
  Cc: Eli Zaretskii, emacs-devel

>> Indeed.  And what's more, I'd be very uneasy about letting the server
>> accept connections from outside my machine, so if that is ever made a
>> possibility, I agree with Stefan that it should be an option.

> The scheme I was thinking of implementing, proposed by Stefan the last
> time around, would force the outside machine to have access to a
> configuration file written by the server Emacs in order to know the
> authentication key. So it's a matter of having the right permissions.
> We're not talking about openly available TCP connections from some
> arbitrary machine.

Modulo security holes, of course, which is the crux of the matter.


        Stefan

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15 14:58                                 ` Stefan Monnier
@ 2006-07-15 15:24                                   ` Juanma Barranquero
  2006-07-15 22:02                                     ` Stefan Monnier
  0 siblings, 1 reply; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-15 15:24 UTC (permalink / raw)
  Cc: Emacs Devel

On 7/15/06, Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> That's for local connections.  If you want to allow remote connections, of
> course you'll use a TCP socket either way (maybe additionally to a unix
> socket).
> I see no problem here.

Uh? Are you proposing that the server can use simultaneously a Unix
socket for local connections and a TCP socket for remote ones? Or
(what I thought) that the server be configurable to use either Unix
sockets (which would naturally limit the connections to local ones) or
TCP sockets?

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15 14:59                               ` Stefan Monnier
@ 2006-07-15 15:30                                 ` Juanma Barranquero
  2006-07-15 20:38                                   ` Eli Zaretskii
  0 siblings, 1 reply; 49+ messages in thread
From: Juanma Barranquero @ 2006-07-15 15:30 UTC (permalink / raw)
  Cc: emacs-devel

On 7/15/06, Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> Modulo security holes, of course, which is the crux of the matter.

In the mechanism discussed earlier there wasn't any specific way of
forcing connections to be local, other than using AF_UNIX sockets (on
Unix, GNU/Linux, etc.) or making the .emacs.server file (with the
authentication code) private via file permissions (which would also
work on Windows).

How do you propose exactly the non-remote policy to be implemented,
and more important, with which interface? An elisp variable to force
only connections from 127.0.0.1, a list of valid IPs, or what?

-- 
                    /L/e/k/t/u

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15  9:05                           ` Eli Zaretskii
  2006-07-15 13:54                             ` Juanma Barranquero
@ 2006-07-15 17:16                             ` Richard Stallman
  1 sibling, 0 replies; 49+ messages in thread
From: Richard Stallman @ 2006-07-15 17:16 UTC (permalink / raw)
  Cc: lekktu, emacs-devel, storm

    Indeed.  And what's more, I'd be very uneasy about letting the server
    accept connections from outside my machine, so if that is ever made a
    possibility, I agree with Stefan that it should be an option.

And it should be disabled by default!

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15 15:30                                 ` Juanma Barranquero
@ 2006-07-15 20:38                                   ` Eli Zaretskii
  2006-07-15 22:07                                     ` Stefan Monnier
  0 siblings, 1 reply; 49+ messages in thread
From: Eli Zaretskii @ 2006-07-15 20:38 UTC (permalink / raw)
  Cc: monnier, emacs-devel

> Date: Sat, 15 Jul 2006 17:30:01 +0200
> From: "Juanma Barranquero" <lekktu@gmail.com>
> Cc: emacs-devel@gnu.org
> 
> On 7/15/06, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
> 
> > Modulo security holes, of course, which is the crux of the matter.
> 
> In the mechanism discussed earlier there wasn't any specific way of
> forcing connections to be local, other than using AF_UNIX sockets (on
> Unix, GNU/Linux, etc.) or making the .emacs.server file (with the
> authentication code) private via file permissions (which would also
> work on Windows).

I've read that part of the past discussions, but I still would feel
uneasy about allowing outside connections.  My firewall blocks all
outside connections for very good reasons.

So I think this possibility should be optional and off by default.

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15 15:24                                   ` Juanma Barranquero
@ 2006-07-15 22:02                                     ` Stefan Monnier
  0 siblings, 0 replies; 49+ messages in thread
From: Stefan Monnier @ 2006-07-15 22:02 UTC (permalink / raw)
  Cc: Emacs Devel

>> That's for local connections.  If you want to allow remote connections, of
>> course you'll use a TCP socket either way (maybe additionally to a unix
>> socket).
>> I see no problem here.

> Uh? Are you proposing that the server can use simultaneously a Unix
> socket for local connections and a TCP socket for remote ones?

Why not, if that's necessary (don't know that it is, and don't know that it
isn't either).

> Or (what I thought) that the server be configurable to use either Unix
> sockets (which would naturally limit the connections to local ones) or
> TCP sockets?

The config var should enable/disable remote connections.
The use of Unix sockets vs TCP sockets is an implementation detail.


        Stefan

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

* Re: 100% CPU on TCP servers (on Windoze).
  2006-07-15 20:38                                   ` Eli Zaretskii
@ 2006-07-15 22:07                                     ` Stefan Monnier
  0 siblings, 0 replies; 49+ messages in thread
From: Stefan Monnier @ 2006-07-15 22:07 UTC (permalink / raw)
  Cc: Juanma Barranquero, emacs-devel

>> > Modulo security holes, of course, which is the crux of the matter.
>> In the mechanism discussed earlier there wasn't any specific way of
>> forcing connections to be local, other than using AF_UNIX sockets (on
>> Unix, GNU/Linux, etc.) or making the .emacs.server file (with the
>> authentication code) private via file permissions (which would also
>> work on Windows).

When Unix sockets are not available, I'd bind to 127.0.0.1 only
(additionally to the use of the .emacs.d/server file so as to protect
oneself from other users on the same machine, which is possible even under
w32).

> I've read that part of the past discussions, but I still would feel
> uneasy about allowing outside connections.  My firewall blocks all
> outside connections for very good reasons.

I think I agree that the default should be to only allow local connections.
And I even think that remote connections can be kept for after Emacs-22 if
they introduce any non-trivial difficulty.


        Stefan

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

end of thread, other threads:[~2006-07-15 22:07 UTC | newest]

Thread overview: 49+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-08-06 18:38 100% CPU on TCP servers Juanma Barranquero
2005-08-18 15:51 ` Juanma Barranquero
2005-09-09 12:53   ` Kim F. Storm
2005-09-09 15:25     ` Juanma Barranquero
2005-09-10  7:47   ` Jason Rumney
2005-09-10 23:01     ` Kim F. Storm
2005-10-12 15:07     ` Kim F. Storm
2005-10-12 22:42       ` Juanma Barranquero
2006-07-13 22:35   ` 100% CPU on TCP servers (on Windoze) Kim F. Storm
2006-07-14  8:15     ` Jason Rumney
2006-07-14  9:54       ` Kim F. Storm
2006-07-14 10:54         ` Juanma Barranquero
2006-07-14  9:51     ` Jason Rumney
2006-07-14 10:23       ` Kim F. Storm
2006-07-14 10:43         ` Jason Rumney
2006-07-14 11:14           ` Eli Zaretskii
2006-07-14 10:50         ` Juanma Barranquero
2006-07-14 11:16           ` Kim F. Storm
2006-07-14 11:42             ` Kim F. Storm
2006-07-14 12:27               ` Juanma Barranquero
2006-07-14 13:08                 ` Eli Zaretskii
2006-07-14 13:59                   ` Jason Rumney
2006-07-14 14:22                     ` Kim F. Storm
2006-07-14 14:41                       ` Jason Rumney
2006-07-14 17:29                       ` Eli Zaretskii
2006-07-14 18:12                         ` Stefan Monnier
2006-07-14 15:43                     ` Stuart D. Herring
2006-07-14 13:24                 ` Kim F. Storm
2006-07-14 13:40                   ` Eli Zaretskii
2006-07-14 14:04                     ` Kim F. Storm
2006-07-14 15:28                   ` Juanma Barranquero
2006-07-14 22:07                     ` Kim F. Storm
2006-07-14 23:23                       ` Juanma Barranquero
2006-07-15  0:50                         ` Kim F. Storm
2006-07-15  2:09                           ` Juanma Barranquero
2006-07-15  9:05                           ` Eli Zaretskii
2006-07-15 13:54                             ` Juanma Barranquero
2006-07-15 14:59                               ` Stefan Monnier
2006-07-15 15:30                                 ` Juanma Barranquero
2006-07-15 20:38                                   ` Eli Zaretskii
2006-07-15 22:07                                     ` Stefan Monnier
2006-07-15 17:16                             ` Richard Stallman
2006-07-15  2:04                         ` Stefan Monnier
2006-07-15  2:11                           ` Juanma Barranquero
2006-07-15 11:52                             ` Stefan Monnier
2006-07-15 13:50                               ` Juanma Barranquero
2006-07-15 14:58                                 ` Stefan Monnier
2006-07-15 15:24                                   ` Juanma Barranquero
2006-07-15 22:02                                     ` Stefan Monnier

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).