From: Kyotaro HORIGUCHI <horiguti@meadowy.org>
Subject: make-network-process(:nowait t) on MS-Windows
Date: Fri, 25 Nov 2005 00:26:40 +0900 (JST) [thread overview]
Message-ID: <20051125.002640.103856392.horiguti@horiguti.meadowy.org> (raw)
make-network-process<f> with parameter `:nowait t' returns nil
instead of process when evaluating the sample lisp code below on
MS-Windows. It seems to have worked once, but does not now.
http://lists.gnu.org/archive/html/emacs-devel/2002-05/msg00147.html
The following patch make this work again.
--
Kyotaro HORIGUCHI
==== sample lisp code
(defun my-filter (pro string)
(goto-char (point-max))
(insert "FIL: " string))
(defun my-sentinel (pro string)
(goto-char (point-max))
(insert "SEN: " string))
(make-network-process
:name "foo"
:buffer (current-buffer)
:host "localhost"
:service "smtp"
:nowait t
:filter 'my-filter
:sentinel 'my-sentinel)
==== patch to make make-network-process work.
Index: w32.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32.c,v
retrieving revision 1.97
diff -r1.97 w32.c
154a155,160
> typedef struct {
> unsigned int fd_count;
> SOCKET fd_array[FD_SETSIZE];
> } pfn_fd_set;
>
>
2697a2704
> int (PASCAL *pfn_select) (int nfds, pfn_fd_set *readfds, pfn_fd_set *writefds, pfn_fd_set *excepfds, const struct timeval *timeout);
2779a2787
> LOAD_PROC( select );
2853a2862
> case WSAEWOULDBLOCK: h_errno = EINPROGRESS; break;
3137a3147,3211
> }
>
> int
> sys_select_socket (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
> {
> int i, j, k, rc, cfds;
> pfn_fd_set *fds[3];
> fd_set *efds[3];
>
> if (winsock_lib == NULL)
> {
> h_errno = ENOTSOCK;
> return SOCKET_ERROR;
> }
>
> check_errno ();
>
> cfds = 0;
> efds[0] = readfds;
> efds[1] = writefds;
> efds[2] = exceptfds;
>
> for (i = 0 ; i < 3 ; i++)
> {
> fds[i] = NULL;
> if (efds[i])
> {
> fds[i] = (pfn_fd_set*)alloca (sizeof (pfn_fd_set));
> fds[i]->fd_count = 0;
> for (j = 0 ; j < nfds ; j++)
> if (FD_ISSET (j, efds[i]))
> {
> if (! (fd_info[j].flags & FILE_SOCKET))
> {
> h_errno = ENOTSOCK;
> return SOCKET_ERROR;
> }
>
> fds[i]->fd_array[fds[i]->fd_count++] = SOCK_HANDLE (j);
> cfds++;
> }
> FD_ZERO (efds[i]);
> }
> }
>
> if (cfds == 0)
> return 0;
>
> rc = pfn_select (nfds, fds[0], fds[1], fds[2], timeout);
>
> if (rc > 0)
> for (i = 0 ; i < 3 ; i++)
> if (fds[i])
> for (j = 0 ; j < fds[i]->fd_count ; j++)
> {
> for (k = 0 ;
> k < nfds && fds[i]->fd_array [j] != SOCK_HANDLE (k) ;
> k++);
> if (k < nfds)
> FD_SET (k, efds[i]);
> }
>
> if (rc == SOCKET_ERROR)
> set_errno ();
> return rc;
Index: w32proc.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32proc.c,v
retrieving revision 1.65
diff -r1.65 w32proc.c
1058c1058
< int i, nh, nc, nr;
---
> int i, nh, nc, nr, nw;
1074c1074
< if (rfds == NULL || wfds != NULL || efds != NULL)
---
> if ((rfds == NULL && wfds == NULL) || efds != NULL)
1082a1083
> nw = 0;
1186a1188,1198
> if (wfds)
> {
> /* Assume this socket is waiting for connection of
> non-blocking socket. */
> struct timeval tm = {0, 0};
> nw = sys_select_socket (nfds, NULL, wfds, NULL, &tm);
>
> if (nw < 0)
> return nw;
> }
>
1327a1340
> nr += nw;
next reply other threads:[~2005-11-24 15:26 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-24 15:26 Kyotaro HORIGUCHI [this message]
2005-11-30 8:43 ` make-network-process(:nowait t) on MS-Windows Kyotaro HORIGUCHI
2005-12-01 6:07 ` Richard M. Stallman
2005-12-01 10:07 ` Jason Rumney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20051125.002640.103856392.horiguti@horiguti.meadowy.org \
--to=horiguti@meadowy.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).