annotate tests/sigpipe.c @ 2420:ad56e5a6d09f

[xemacs-hg @ 2004-12-06 03:46:06 by ben] (none) README.packages: Document use of --package-prefix. Fix error in specifying standard package location. make-docfile.c: Use QXE_PATH_MAX. info.el: Correct doc string giving example package path. menubar-items.el: Move Prefix Rectangle command up one level. xemacs/packages.texi: Add long form of Lisp Reference Manual to links. Add links pointing to Lisp Reference Manual for more detailed package discussion. lispref/range-tables.texi: Document range-table changes. internals/internals.texi: Update history section. elhash.c, elhash.h, profile.c: Create inchash_eq() to allow direct incrementing of hash-table entry. Use in profile.c to try to reduce profiling overhead. Increase initial size of profile hash tables to reduce profiling overhead. buffer.c, device-msw.c, dialog-msw.c, dired-msw.c, editfns.c, event-msw.c, events.c, glyphs-msw.c, keymap.c, objects-msw.c, process-nt.c, syswindows.h, text.c, text.h, unexnt.c: Rename xetcs* -> qxetcs* for consistency with qxestr*. Rename ei*_c(_*) -> ei*_ascii(_*) since they work with ASCII-only strings not "C strings", whatever those are. This is the last place where "c" was incorrectly being used for "ascii". dialog-msw.c, dumper.c, event-msw.c, fileio.c, glyphs-gtk.c, glyphs-x.c, nt.c, process-nt.c, realpath.c, sysdep.c, sysfile.h, unexcw.c, unexnext.c, unexnt.c: Try to avoid differences in systems that do or do not include final null byte in PATH_MAX. Create PATH_MAX_INTERNAL and PATH_MAX_EXTERNAL and use them everywhere. Rewrite code in dumper.c to avoid use of PATH_MAX. When necessary in nt.c, use _MAX_PATH instead of MAX_PATH to be consistent with other places. text.c: Code to short-circuit when binary or Unicode was not working due to EOL wrapping. Fix this code to work when either no EOL autodetection or no CR's or LF's in the text. lisp.h, rangetab.c, rangetab.h, regex.c, search.c: Implement different types of ranges (open/closed start and end). Change default to be start-closed, end-open.
author ben
date Mon, 06 Dec 2004 03:46:07 +0000
parents 3f6adebda25c
children 679041362cd4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1231
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
1 /* code is all from loser.c and loser.el by Mly
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
2
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
3 Copyright (C) 2002 Richard Mlynarik <mly@pobox.com>
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
4
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
5 This is part of XEmacs
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
6
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
7 Compile this file. Run it in the background giving it a command line
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
8 argument PORT which is a positive integer 1024 < PORT < 32768 (avoid the
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
9 numbers assigned in /etc/services).
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
10
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
11 Then start up a fresh (you're going to crash) XEmacs. Execute the following
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
12
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
13 (defun lose (port)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
14 (interactive "nUrk: ")
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
15 (require 'comint)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
16 (while t
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
17 (condition-case e
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
18 (let* ((name "*lose*")
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
19 (b (get-buffer-create name)))
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
20 (switch-to-buffer b)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
21 (comint-mode)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
22 (comint-exec b name (cons "127.0.0.1" port) nil '())
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
23 (process-send-string (get-buffer-process b) "\377\373\001")
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
24 (process-send-string (get-buffer-process b) "\377\373\001"))
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
25 (error (message "URK: %s" e)) (sit-for 1))))
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
26
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
27 Then M-x lose RET PORT RET and you lose big (in XEmacs 21.1, anyway).
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
28 Note: the error messages are proper functioning. What should eventually
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
29 happen after a number of SIGPIPEs is that you get a SIGSEGV and life is
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
30 bad and XEmacs is dead.
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
31 */
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
32
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
33 #include <arpa/inet.h>
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
34
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
35 int
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
36 main (int argc, char **argv)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
37 {
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
38 struct sockaddr_in junk;
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
39 int s;
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
40
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
41 memset (&junk, 0, sizeof (junk));
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
42
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
43 junk.sin_family = AF_INET;
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
44 junk.sin_addr.s_addr = htonl (INADDR_ANY); /* un*x sucks */
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
45 junk.sin_port = htons (atoi (argv[1])); /* un*x blows */
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
46
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
47 s = socket (PF_INET, SOCK_STREAM, 0);
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
48
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
49 bind (s, (struct sockaddr *)&junk, sizeof (junk));
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
50
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
51 listen (s, 1);
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
52
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
53 for (;;)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
54 {
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
55 int loser = accept (s, NULL, 0);
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
56 close (loser);
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
57 }
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
58 }
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
59