diff options
Diffstat (limited to 'src/process.c')
| -rw-r--r-- | src/process.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/process.c b/src/process.c index 0edd092ef66..4a286391f88 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -3420,16 +3420,32 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, | |||
| 3420 | #ifdef HAVE_GETSOCKNAME | 3420 | #ifdef HAVE_GETSOCKNAME |
| 3421 | if (p->port == 0) | 3421 | if (p->port == 0) |
| 3422 | { | 3422 | { |
| 3423 | struct sockaddr_in sa1; | 3423 | struct sockaddr_storage sa1; |
| 3424 | socklen_t len1 = sizeof (sa1); | 3424 | socklen_t len1 = sizeof (sa1); |
| 3425 | if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0) | 3425 | if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0) |
| 3426 | { | 3426 | { |
| 3427 | Lisp_Object service; | ||
| 3428 | service = make_number (ntohs (sa1.sin_port)); | ||
| 3429 | contact = Fplist_put (contact, QCservice, service); | ||
| 3430 | /* Save the port number so that we can stash it in | 3427 | /* Save the port number so that we can stash it in |
| 3431 | the process object later. */ | 3428 | the process object later. */ |
| 3432 | ((struct sockaddr_in *)sa)->sin_port = sa1.sin_port; | 3429 | int port = -1; |
| 3430 | switch (family) | ||
| 3431 | { | ||
| 3432 | case AF_INET: | ||
| 3433 | ((struct sockaddr_in *) sa)->sin_port | ||
| 3434 | = port = ((struct sockaddr_in *) &sa1)->sin_port; | ||
| 3435 | break; | ||
| 3436 | # ifdef AF_INET6 | ||
| 3437 | case AF_INET6: | ||
| 3438 | ((struct sockaddr_in6 *) sa)->sin6_port | ||
| 3439 | = port = ((struct sockaddr_in6 *) &sa1)->sin6_port; | ||
| 3440 | break; | ||
| 3441 | # endif | ||
| 3442 | } | ||
| 3443 | |||
| 3444 | if (0 <= port) | ||
| 3445 | { | ||
| 3446 | Lisp_Object service = make_number (ntohs (port)); | ||
| 3447 | contact = Fplist_put (contact, QCservice, service); | ||
| 3448 | } | ||
| 3433 | } | 3449 | } |
| 3434 | } | 3450 | } |
| 3435 | #endif | 3451 | #endif |
| @@ -3535,7 +3551,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, | |||
| 3535 | #ifdef HAVE_GETSOCKNAME | 3551 | #ifdef HAVE_GETSOCKNAME |
| 3536 | if (!p->is_server) | 3552 | if (!p->is_server) |
| 3537 | { | 3553 | { |
| 3538 | struct sockaddr_in sa1; | 3554 | struct sockaddr_storage sa1; |
| 3539 | socklen_t len1 = sizeof (sa1); | 3555 | socklen_t len1 = sizeof (sa1); |
| 3540 | if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0) | 3556 | if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0) |
| 3541 | contact = Fplist_put (contact, QClocal, | 3557 | contact = Fplist_put (contact, QClocal, |