unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Allow specifying services as symbols?
@ 2010-10-19 18:07 Lars Magne Ingebrigtsen
  2010-10-19 18:22 ` Eli Zaretskii
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Lars Magne Ingebrigtsen @ 2010-10-19 18:07 UTC (permalink / raw)
  To: emacs-devel

It was suggested that we should allow specifying port names (e.g.,
"imap") as symbols, too, in addition to strings and numbers.  Any
objections to something like the following?

=== modified file 'src/process.c'
*** src/process.c	2010-10-08 10:14:47 +0000
--- src/process.c	2010-10-19 18:06:05 +0000
***************
*** 2977,2987 ****
  for a server process, it must be a valid name or address for the local
  host, and only clients connecting to that address will be accepted.
  
! :service SERVICE -- SERVICE is name of the service desired, or an
! integer specifying a port number to connect to.  If SERVICE is t,
! a random port number is selected for the server.  (If Emacs was
! compiled with getaddrinfo, a port number can also be specified as a
! string, e.g. "80", as well as an integer.  This is not portable.)
  
  :type TYPE -- TYPE is the type of connection.  The default (nil) is a
  stream type connection, `datagram' creates a datagram type connection,
--- 2977,2988 ----
  for a server process, it must be a valid name or address for the local
  host, and only clients connecting to that address will be accepted.
  
! :service SERVICE -- SERVICE is name of the service desired (a string
! or a symbol) or an integer specifying a port number to connect to.  If
! SERVICE is t, a random port number is selected for the server.  (If
! Emacs was compiled with getaddrinfo, a port number can also be
! specified as a string, e.g. "http", as well as an integer.  This is
! not portable.)
  
  :type TYPE -- TYPE is the type of connection.  The default (nil) is a
  stream type connection, `datagram' creates a datagram type connection,
***************
*** 3313,3318 ****
--- 3314,3323 ----
  	  sprintf (portbuf, "%ld", (long) XINT (service));
  	  portstring = portbuf;
  	}
+       else if (SYMBOLP (service))
+ 	{
+ 	  portstring = SDATA (SYMBOL_NAME (service));
+ 	}
        else
  	{
  	  CHECK_STRING (service);



-- 
(domestic pets only, the antidote for overdose, milk.)
  larsi@gnus.org * Lars Magne Ingebrigtsen




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

* Re: Allow specifying services as symbols?
  2010-10-19 18:07 Allow specifying services as symbols? Lars Magne Ingebrigtsen
@ 2010-10-19 18:22 ` Eli Zaretskii
  2010-10-19 19:09 ` Ted Zlatanov
  2010-10-19 21:32 ` Davis Herring
  2 siblings, 0 replies; 14+ messages in thread
From: Eli Zaretskii @ 2010-10-19 18:22 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: emacs-devel

> From: Lars Magne Ingebrigtsen <larsi@gnus.org>
> Date: Tue, 19 Oct 2010 20:07:46 +0200
> 
> It was suggested that we should allow specifying port names (e.g.,
> "imap") as symbols, too, in addition to strings and numbers.  Any
> objections to something like the following?

If this is accepted, please also update the ELisp manual.

Thanks.



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

* Re: Allow specifying services as symbols?
  2010-10-19 18:07 Allow specifying services as symbols? Lars Magne Ingebrigtsen
  2010-10-19 18:22 ` Eli Zaretskii
@ 2010-10-19 19:09 ` Ted Zlatanov
  2010-10-19 20:17   ` Chong Yidong
  2010-10-19 21:32 ` Davis Herring
  2 siblings, 1 reply; 14+ messages in thread
From: Ted Zlatanov @ 2010-10-19 19:09 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 558 bytes --]

On Tue, 19 Oct 2010 20:07:46 +0200 Lars Magne Ingebrigtsen <larsi@gnus.org> wrote: 

LMI> It was suggested that we should allow specifying port names (e.g.,
LMI> "imap") as symbols, too, in addition to strings and numbers.  Any
LMI> objections to something like the following?

My patch, attached here, corrects the docstring and fixes the two places
where the port should be a symbol (you only got one, I think, because of
the "goto open_socket" right before "#endif /* HAVE_GETADDRINFO */").

I'll write a manual patch as well if this is acceptable.

Ted


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: make-network-connection-with-symbol-service.patch --]
[-- Type: text/x-diff, Size: 1807 bytes --]

=== modified file 'src/process.c'
--- src/process.c	2010-10-08 10:14:47 +0000
+++ src/process.c	2010-10-19 18:26:51 +0000
@@ -2978,10 +2978,11 @@
 host, and only clients connecting to that address will be accepted.
 
 :service SERVICE -- SERVICE is name of the service desired, or an
-integer specifying a port number to connect to.  If SERVICE is t,
-a random port number is selected for the server.  (If Emacs was
-compiled with getaddrinfo, a port number can also be specified as a
-string, e.g. "80", as well as an integer.  This is not portable.)
+integer specifying a port number to connect to.  If SERVICE is t, a
+random port number is selected for the server.  A port number can also
+be specified as a string, e.g. "80", or a symbol whose name will be
+used, as well as an integer.  This is not necessarily portable; either
+getaddrinfo or getservbyname will be used to look up the port number.
 
 :type TYPE -- TYPE is the type of connection.  The default (nil) is a
 stream type connection, `datagram' creates a datagram type connection,
@@ -3303,6 +3304,11 @@
      Otherwise, use getservbyname to lookup the service.  */
   if (!NILP (host))
     {
+      /* Take a symbol as the service and convert it to a string.  */
+      if (SYMBOLP (service))
+	{
+	  service = Fsymbol_name (service);
+	}
 
       /* SERVICE can either be a string or int.
 	 Convert to a C string for later use by getaddrinfo.  */
@@ -3347,6 +3353,12 @@
   /* We end up here if getaddrinfo is not defined, or in case no hostname
      has been specified (e.g. for a local server process).  */
 
+  /* Take a symbol as the service and convert it to a string.  */
+  if (SYMBOLP (service))
+    {
+      service = Fsymbol_name (service);
+    }
+
   if (EQ (service, Qt))
     port = 0;
   else if (INTEGERP (service))


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

* Re: Allow specifying services as symbols?
  2010-10-19 19:09 ` Ted Zlatanov
@ 2010-10-19 20:17   ` Chong Yidong
  2010-10-19 21:25     ` Ted Zlatanov
  0 siblings, 1 reply; 14+ messages in thread
From: Chong Yidong @ 2010-10-19 20:17 UTC (permalink / raw)
  To: Ted Zlatanov; +Cc: emacs-devel

Ted Zlatanov <tzz@lifelogs.com> writes:

> My patch, attached here, corrects the docstring and fixes the two places
> where the port should be a symbol (you only got one, I think, because of
> the "goto open_socket" right before "#endif /* HAVE_GETADDRINFO */").
>
> I'll write a manual patch as well if this is acceptable.

Seems OK to me.



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

* Re: Allow specifying services as symbols?
  2010-10-19 20:17   ` Chong Yidong
@ 2010-10-19 21:25     ` Ted Zlatanov
  0 siblings, 0 replies; 14+ messages in thread
From: Ted Zlatanov @ 2010-10-19 21:25 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 573 bytes --]

On Tue, 19 Oct 2010 16:17:08 -0400 Chong Yidong <cyd@stupidchicken.com> wrote: 

CY> Ted Zlatanov <tzz@lifelogs.com> writes:
>> My patch, attached here, corrects the docstring and fixes the two places
>> where the port should be a symbol (you only got one, I think, because of
>> the "goto open_socket" right before "#endif /* HAVE_GETADDRINFO */").
>> 
>> I'll write a manual patch as well if this is acceptable.

CY> Seems OK to me.

The patch to the manual and the code is below.  I can't commit it until
much later, so if anyone wants to do it sooner, feel free.

Ted


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: make-network-connection-with-symbol-service.patch --]
[-- Type: text/x-diff, Size: 3317 bytes --]

=== modified file 'doc/lispref/processes.texi'
--- doc/lispref/processes.texi	2010-08-25 05:23:47 +0000
+++ doc/lispref/processes.texi	2010-10-19 21:22:42 +0000
@@ -1937,9 +1937,10 @@
 @var{buffer-or-name} is @code{nil}, it means that the connection is not
 associated with any buffer.
 
-The arguments @var{host} and @var{service} specify where to connect to;
-@var{host} is the host name (a string), and @var{service} is the name of
-a defined network service (a string) or a port number (an integer).
+The arguments @var{host} and @var{service} specify where to connect
+to; @var{host} is the host name (a string), and @var{service} is the
+name of a defined network service (a string or a symbol) or a port
+number (an integer).
 @end defun
 
 @node Network Servers
@@ -2076,10 +2077,10 @@
 
 @item :service @var{service}
 @var{service} specifies a port number to connect to, or, for a server,
-the port number to listen on.  It should be a service name that
-translates to a port number, or an integer specifying the port number
-directly.  For a server, it can also be @code{t}, which means to let
-the system select an unused port number.
+the port number to listen on.  It should be a service name (a string
+or a symbol) that translates to a port number, or an integer
+specifying the port number directly.  For a server, it can also be
+@code{t}, which means to let the system select an unused port number.
 
 @item :family @var{family}
 @var{family} specifies the address (and protocol) family for

=== modified file 'src/process.c'
--- src/process.c	2010-10-08 10:14:47 +0000
+++ src/process.c	2010-10-19 18:26:51 +0000
@@ -2978,10 +2978,11 @@
 host, and only clients connecting to that address will be accepted.
 
 :service SERVICE -- SERVICE is name of the service desired, or an
-integer specifying a port number to connect to.  If SERVICE is t,
-a random port number is selected for the server.  (If Emacs was
-compiled with getaddrinfo, a port number can also be specified as a
-string, e.g. "80", as well as an integer.  This is not portable.)
+integer specifying a port number to connect to.  If SERVICE is t, a
+random port number is selected for the server.  A port number can also
+be specified as a string, e.g. "80", or a symbol whose name will be
+used, as well as an integer.  This is not necessarily portable; either
+getaddrinfo or getservbyname will be used to look up the port number.
 
 :type TYPE -- TYPE is the type of connection.  The default (nil) is a
 stream type connection, `datagram' creates a datagram type connection,
@@ -3303,6 +3304,11 @@
      Otherwise, use getservbyname to lookup the service.  */
   if (!NILP (host))
     {
+      /* Take a symbol as the service and convert it to a string.  */
+      if (SYMBOLP (service))
+	{
+	  service = Fsymbol_name (service);
+	}
 
       /* SERVICE can either be a string or int.
 	 Convert to a C string for later use by getaddrinfo.  */
@@ -3347,6 +3353,12 @@
   /* We end up here if getaddrinfo is not defined, or in case no hostname
      has been specified (e.g. for a local server process).  */
 
+  /* Take a symbol as the service and convert it to a string.  */
+  if (SYMBOLP (service))
+    {
+      service = Fsymbol_name (service);
+    }
+
   if (EQ (service, Qt))
     port = 0;
   else if (INTEGERP (service))


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

* Re: Allow specifying services as symbols?
  2010-10-19 18:07 Allow specifying services as symbols? Lars Magne Ingebrigtsen
  2010-10-19 18:22 ` Eli Zaretskii
  2010-10-19 19:09 ` Ted Zlatanov
@ 2010-10-19 21:32 ` Davis Herring
  2010-10-19 22:20   ` Chong Yidong
  2 siblings, 1 reply; 14+ messages in thread
From: Davis Herring @ 2010-10-19 21:32 UTC (permalink / raw)
  To: emacs-devel

> ! :service SERVICE -- SERVICE is name of the service desired (a string
> ! or a symbol) or an integer specifying a port number to connect to.  If
> ! SERVICE is t, a random port number is selected for the server.  (If
> ! Emacs was compiled with getaddrinfo, a port number can also be
> ! specified as a string, e.g. "http", as well as an integer.  This is
> ! not portable.)

As more of a philosophical objection than anything, t is a symbol.

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] 14+ messages in thread

* Re: Allow specifying services as symbols?
  2010-10-19 21:32 ` Davis Herring
@ 2010-10-19 22:20   ` Chong Yidong
  2010-10-19 23:46     ` Lars Magne Ingebrigtsen
  2010-10-20 11:32     ` Ted Zlatanov
  0 siblings, 2 replies; 14+ messages in thread
From: Chong Yidong @ 2010-10-19 22:20 UTC (permalink / raw)
  To: herring; +Cc: emacs-devel

"Davis Herring" <herring@lanl.gov> writes:

>> ! :service SERVICE -- SERVICE is name of the service desired (a string
>> ! or a symbol) or an integer specifying a port number to connect to.  If
>> ! SERVICE is t, a random port number is selected for the server.  (If
>> ! Emacs was compiled with getaddrinfo, a port number can also be
>> ! specified as a string, e.g. "http", as well as an integer.  This is
>> ! not portable.)
>
> As more of a philosophical objection than anything, t is a symbol.

Hmm, good catch.  So's nil.

So let's back up for a moment, here.  Lars, could you provide an example
that shows why it's convenient to allow symbols to name services?



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

* Re: Allow specifying services as symbols?
  2010-10-19 22:20   ` Chong Yidong
@ 2010-10-19 23:46     ` Lars Magne Ingebrigtsen
  2010-10-20 15:36       ` Stefan Monnier
  2010-10-20 11:32     ` Ted Zlatanov
  1 sibling, 1 reply; 14+ messages in thread
From: Lars Magne Ingebrigtsen @ 2010-10-19 23:46 UTC (permalink / raw)
  To: emacs-devel

Chong Yidong <cyd@stupidchicken.com> writes:

>> As more of a philosophical objection than anything, t is a symbol.
>
> Hmm, good catch.  So's nil.

True.  Perhaps this isn't a good idea after all.  It's just come more
than a few times over the years that people are using 'nntp instead of
"nntp" and 'imap instead of "imap" and not understanding why they're
getting errors.

Since these are things that users mess around with, I thought it might
be user-friendly to allow these forms, but I don't really care.

-- 
(domestic pets only, the antidote for overdose, milk.)
  larsi@gnus.org * Lars Magne Ingebrigtsen




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

* Re: Allow specifying services as symbols?
  2010-10-19 22:20   ` Chong Yidong
  2010-10-19 23:46     ` Lars Magne Ingebrigtsen
@ 2010-10-20 11:32     ` Ted Zlatanov
  2010-10-20 11:52       ` Andreas Schwab
  1 sibling, 1 reply; 14+ messages in thread
From: Ted Zlatanov @ 2010-10-20 11:32 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1570 bytes --]

On Tue, 19 Oct 2010 18:20:55 -0400 Chong Yidong <cyd@stupidchicken.com> wrote: 

CY> "Davis Herring" <herring@lanl.gov> writes:
>>> ! :service SERVICE -- SERVICE is name of the service desired (a string
>>> ! or a symbol) or an integer specifying a port number to connect to.  If
>>> ! SERVICE is t, a random port number is selected for the server.  (If
>>> ! Emacs was compiled with getaddrinfo, a port number can also be
>>> ! specified as a string, e.g. "http", as well as an integer.  This is
>>> ! not portable.)
>> 
>> As more of a philosophical objection than anything, t is a symbol.

CY> Hmm, good catch.  So's nil.

OK, I will exclude t and nil.  That was a problem with the patch (t was
converted to "t" and nil to "nil").  Thanks for catching that!  Revised
version attached.

CY> So let's back up for a moment, here.  Lars, could you provide an example
CY> that shows why it's convenient to allow symbols to name services?

The issue came up as a customization user-side problem and I suggested
allowing symbols.  Using symbols is consistent with many other Emacs
facilities (too many to list) that use symbols to enumerate a small set
of choices.  It makes customization simpler and less error-prone for
software that uses `make-network-process'.  It doesn't really cost
anything.  The only downside is that if in the future we decide to add
options to the :service parameter besides t and nil, they won't be easy
to retrofit.

It's really not a big deal though, so if you're concerned about the
downside I listed or any others, let's kill the idea.

Ted


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: make-network-connection-with-symbol-service.patch --]
[-- Type: text/x-diff, Size: 3397 bytes --]

=== modified file 'doc/lispref/processes.texi'
--- doc/lispref/processes.texi	2010-08-25 05:23:47 +0000
+++ doc/lispref/processes.texi	2010-10-20 11:18:48 +0000
@@ -1937,9 +1937,10 @@
 @var{buffer-or-name} is @code{nil}, it means that the connection is not
 associated with any buffer.
 
-The arguments @var{host} and @var{service} specify where to connect to;
-@var{host} is the host name (a string), and @var{service} is the name of
-a defined network service (a string) or a port number (an integer).
+The arguments @var{host} and @var{service} specify where to connect
+to; @var{host} is the host name (a string), and @var{service} is the
+name of a defined network service (a string or a symbol) or a port
+number (an integer).
 @end defun
 
 @node Network Servers
@@ -2076,10 +2077,10 @@
 
 @item :service @var{service}
 @var{service} specifies a port number to connect to, or, for a server,
-the port number to listen on.  It should be a service name that
-translates to a port number, or an integer specifying the port number
-directly.  For a server, it can also be @code{t}, which means to let
-the system select an unused port number.
+the port number to listen on.  It should be a service name (a string
+or a symbol) that translates to a port number, or an integer
+specifying the port number directly.  For a server, it can also be
+@code{t}, which means to let the system select an unused port number.
 
 @item :family @var{family}
 @var{family} specifies the address (and protocol) family for

=== modified file 'src/process.c'
--- src/process.c	2010-10-08 10:14:47 +0000
+++ src/process.c	2010-10-20 11:20:53 +0000
@@ -2978,10 +2978,11 @@
 host, and only clients connecting to that address will be accepted.
 
 :service SERVICE -- SERVICE is name of the service desired, or an
-integer specifying a port number to connect to.  If SERVICE is t,
-a random port number is selected for the server.  (If Emacs was
-compiled with getaddrinfo, a port number can also be specified as a
-string, e.g. "80", as well as an integer.  This is not portable.)
+integer specifying a port number to connect to.  If SERVICE is t, a
+random port number is selected for the server.  A port number can also
+be specified as a string, e.g. "80", or a symbol whose name will be
+used, as well as an integer.  This is not necessarily portable; either
+getaddrinfo or getservbyname will be used to look up the port number.
 
 :type TYPE -- TYPE is the type of connection.  The default (nil) is a
 stream type connection, `datagram' creates a datagram type connection,
@@ -3303,6 +3304,11 @@
      Otherwise, use getservbyname to lookup the service.  */
   if (!NILP (host))
     {
+      /* Take a symbol as the service and convert it to a string.  */
+      if (!NILP (service) && !EQ (service, Qt) && SYMBOLP (service))
+	{
+	  service = Fsymbol_name (service);
+	}
 
       /* SERVICE can either be a string or int.
 	 Convert to a C string for later use by getaddrinfo.  */
@@ -3347,6 +3353,12 @@
   /* We end up here if getaddrinfo is not defined, or in case no hostname
      has been specified (e.g. for a local server process).  */
 
+  /* Take a symbol as the service and convert it to a string.  */
+  if (!NILP (service) && !EQ (service, Qt) && SYMBOLP (service))
+    {
+      service = Fsymbol_name (service);
+    }
+
   if (EQ (service, Qt))
     port = 0;
   else if (INTEGERP (service))


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

* Re: Allow specifying services as symbols?
  2010-10-20 11:32     ` Ted Zlatanov
@ 2010-10-20 11:52       ` Andreas Schwab
  2010-10-20 12:29         ` Ted Zlatanov
  0 siblings, 1 reply; 14+ messages in thread
From: Andreas Schwab @ 2010-10-20 11:52 UTC (permalink / raw)
  To: Ted Zlatanov; +Cc: emacs-devel

Ted Zlatanov <tzz@lifelogs.com> writes:

> @@ -3303,6 +3304,11 @@
>       Otherwise, use getservbyname to lookup the service.  */
>    if (!NILP (host))
>      {
> +      /* Take a symbol as the service and convert it to a string.  */
> +      if (!NILP (service) && !EQ (service, Qt) && SYMBOLP (service))
> +	{
> +	  service = Fsymbol_name (service);
> +	}
>  
>        /* SERVICE can either be a string or int.
>  	 Convert to a C string for later use by getaddrinfo.  */

Why not just move the hunk down to where service is checked for being a
string?

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



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

* Re: Allow specifying services as symbols?
  2010-10-20 11:52       ` Andreas Schwab
@ 2010-10-20 12:29         ` Ted Zlatanov
  0 siblings, 0 replies; 14+ messages in thread
From: Ted Zlatanov @ 2010-10-20 12:29 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 334 bytes --]

On Wed, 20 Oct 2010 13:52:11 +0200 Andreas Schwab <schwab@linux-m68k.org> wrote: 

AS> Why not just move the hunk down to where service is checked for being a
AS> string?

That would be smarter, yes.  In the second place it was not a simple "if
else" so I somehow didn't think to do it correctly.  See the attached
third patch.

Ted


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: make-network-connection-with-symbol-service.patch --]
[-- Type: text/x-diff, Size: 3468 bytes --]

=== modified file 'doc/lispref/processes.texi'
--- doc/lispref/processes.texi	2010-08-25 05:23:47 +0000
+++ doc/lispref/processes.texi	2010-10-20 11:18:48 +0000
@@ -1937,9 +1937,10 @@
 @var{buffer-or-name} is @code{nil}, it means that the connection is not
 associated with any buffer.
 
-The arguments @var{host} and @var{service} specify where to connect to;
-@var{host} is the host name (a string), and @var{service} is the name of
-a defined network service (a string) or a port number (an integer).
+The arguments @var{host} and @var{service} specify where to connect
+to; @var{host} is the host name (a string), and @var{service} is the
+name of a defined network service (a string or a symbol) or a port
+number (an integer).
 @end defun
 
 @node Network Servers
@@ -2076,10 +2077,10 @@
 
 @item :service @var{service}
 @var{service} specifies a port number to connect to, or, for a server,
-the port number to listen on.  It should be a service name that
-translates to a port number, or an integer specifying the port number
-directly.  For a server, it can also be @code{t}, which means to let
-the system select an unused port number.
+the port number to listen on.  It should be a service name (a string
+or a symbol) that translates to a port number, or an integer
+specifying the port number directly.  For a server, it can also be
+@code{t}, which means to let the system select an unused port number.
 
 @item :family @var{family}
 @var{family} specifies the address (and protocol) family for

=== modified file 'src/process.c'
--- src/process.c	2010-10-08 10:14:47 +0000
+++ src/process.c	2010-10-20 12:26:46 +0000
@@ -2978,10 +2978,11 @@
 host, and only clients connecting to that address will be accepted.
 
 :service SERVICE -- SERVICE is name of the service desired, or an
-integer specifying a port number to connect to.  If SERVICE is t,
-a random port number is selected for the server.  (If Emacs was
-compiled with getaddrinfo, a port number can also be specified as a
-string, e.g. "80", as well as an integer.  This is not portable.)
+integer specifying a port number to connect to.  If SERVICE is t, a
+random port number is selected for the server.  A port number can also
+be specified as a string, e.g. "80", or a symbol whose name will be
+used, as well as an integer.  This is not necessarily portable; either
+getaddrinfo or getservbyname will be used to look up the port number.
 
 :type TYPE -- TYPE is the type of connection.  The default (nil) is a
 stream type connection, `datagram' creates a datagram type connection,
@@ -3303,7 +3304,6 @@
      Otherwise, use getservbyname to lookup the service.  */
   if (!NILP (host))
     {
-
       /* SERVICE can either be a string or int.
 	 Convert to a C string for later use by getaddrinfo.  */
       if (EQ (service, Qt))
@@ -3313,6 +3313,11 @@
 	  sprintf (portbuf, "%ld", (long) XINT (service));
 	  portstring = portbuf;
 	}
+      /* Take a symbol as the service and convert it to a string.  */
+      else if (SYMBOLP (service))
+	{
+	  service = Fsymbol_name (service);
+	}
       else
 	{
 	  CHECK_STRING (service);
@@ -3353,6 +3358,12 @@
     port = htons ((unsigned short) XINT (service));
   else
     {
+      /* Take a symbol as the service and convert it to a string.  */
+      if (SYMBOLP (service))
+	{
+	  service = Fsymbol_name (service);
+	}
+
       struct servent *svc_info;
       CHECK_STRING (service);
       svc_info = getservbyname (SDATA (service),


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

* Re: Allow specifying services as symbols?
  2010-10-19 23:46     ` Lars Magne Ingebrigtsen
@ 2010-10-20 15:36       ` Stefan Monnier
  2010-10-20 16:10         ` Chong Yidong
  2010-10-20 16:21         ` Ted Zlatanov
  0 siblings, 2 replies; 14+ messages in thread
From: Stefan Monnier @ 2010-10-20 15:36 UTC (permalink / raw)
  To: emacs-devel

>>> As more of a philosophical objection than anything, t is a symbol.
>> Hmm, good catch.  So's nil.
> True.  Perhaps this isn't a good idea after all.  It's just come more
> than a few times over the years that people are using 'nntp instead of
> "nntp" and 'imap instead of "imap" and not understanding why they're
> getting errors.

Maybe signalling a clear error would be a better choice.

> The issue came up as a customization user-side problem and I suggested
> allowing symbols.  Using symbols is consistent with many other Emacs
> facilities (too many to list) that use symbols to enumerate a small set
> of choices.  It makes customization simpler and less error-prone for
> software that uses `make-network-process'.  It doesn't really cost

We're talking about an argument to a function, so it's not directly
related to customization.  IOW if there's a problem with customization,
it can be fixed elsewhere.


        Stefan



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

* Re: Allow specifying services as symbols?
  2010-10-20 15:36       ` Stefan Monnier
@ 2010-10-20 16:10         ` Chong Yidong
  2010-10-20 16:21         ` Ted Zlatanov
  1 sibling, 0 replies; 14+ messages in thread
From: Chong Yidong @ 2010-10-20 16:10 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>>>> As more of a philosophical objection than anything, t is a symbol.
>>> Hmm, good catch.  So's nil.
>> True.  Perhaps this isn't a good idea after all.  It's just come more
>> than a few times over the years that people are using 'nntp instead of
>> "nntp" and 'imap instead of "imap" and not understanding why they're
>> getting errors.
>
> Maybe signalling a clear error would be a better choice.

True enough, but

  (make-network-process :service 'http)

does seem a bit more elispy than

  (make-network-process :service "http")



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

* Re: Allow specifying services as symbols?
  2010-10-20 15:36       ` Stefan Monnier
  2010-10-20 16:10         ` Chong Yidong
@ 2010-10-20 16:21         ` Ted Zlatanov
  1 sibling, 0 replies; 14+ messages in thread
From: Ted Zlatanov @ 2010-10-20 16:21 UTC (permalink / raw)
  To: emacs-devel

On Wed, 20 Oct 2010 11:36:00 -0400 Stefan Monnier <monnier@iro.umontreal.ca> wrote: 

>> The issue came up as a customization user-side problem and I suggested
>> allowing symbols.  Using symbols is consistent with many other Emacs
>> facilities (too many to list) that use symbols to enumerate a small set
>> of choices.  It makes customization simpler and less error-prone for
>> software that uses `make-network-process'.  It doesn't really cost

SM> We're talking about an argument to a function, so it's not directly
SM> related to customization.  IOW if there's a problem with customization,
SM> it can be fixed elsewhere.

OK, let's forget about the patch.  There's too many useful cases where a
symbol could be passed to `make-network-process' as the service name and
trigger special behavior, plus there's no real need for changing the
current behavior.

Ted




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

end of thread, other threads:[~2010-10-20 16:21 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-10-19 18:07 Allow specifying services as symbols? Lars Magne Ingebrigtsen
2010-10-19 18:22 ` Eli Zaretskii
2010-10-19 19:09 ` Ted Zlatanov
2010-10-19 20:17   ` Chong Yidong
2010-10-19 21:25     ` Ted Zlatanov
2010-10-19 21:32 ` Davis Herring
2010-10-19 22:20   ` Chong Yidong
2010-10-19 23:46     ` Lars Magne Ingebrigtsen
2010-10-20 15:36       ` Stefan Monnier
2010-10-20 16:10         ` Chong Yidong
2010-10-20 16:21         ` Ted Zlatanov
2010-10-20 11:32     ` Ted Zlatanov
2010-10-20 11:52       ` Andreas Schwab
2010-10-20 12:29         ` Ted Zlatanov

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