1231
+ − 1 /* code is all from loser.c and loser.el by Mly
+ − 2
+ − 3 Copyright (C) 2002 Richard Mlynarik <mly@pobox.com>
+ − 4
+ − 5 This is part of XEmacs
+ − 6
+ − 7 Compile this file. Run it in the background giving it a command line
+ − 8 argument PORT which is a positive integer 1024 < PORT < 32768 (avoid the
+ − 9 numbers assigned in /etc/services).
+ − 10
+ − 11 Then start up a fresh (you're going to crash) XEmacs. Execute the following
+ − 12
+ − 13 (defun lose (port)
+ − 14 (interactive "nUrk: ")
+ − 15 (require 'comint)
+ − 16 (while t
+ − 17 (condition-case e
+ − 18 (let* ((name "*lose*")
+ − 19 (b (get-buffer-create name)))
+ − 20 (switch-to-buffer b)
+ − 21 (comint-mode)
+ − 22 (comint-exec b name (cons "127.0.0.1" port) nil '())
+ − 23 (process-send-string (get-buffer-process b) "\377\373\001")
+ − 24 (process-send-string (get-buffer-process b) "\377\373\001"))
+ − 25 (error (message "URK: %s" e)) (sit-for 1))))
+ − 26
+ − 27 Then M-x lose RET PORT RET and you lose big (in XEmacs 21.1, anyway).
+ − 28 Note: the error messages are proper functioning. What should eventually
+ − 29 happen after a number of SIGPIPEs is that you get a SIGSEGV and life is
+ − 30 bad and XEmacs is dead.
+ − 31 */
+ − 32
+ − 33 #include <arpa/inet.h>
+ − 34
+ − 35 int
+ − 36 main (int argc, char **argv)
+ − 37 {
+ − 38 struct sockaddr_in junk;
+ − 39 int s;
+ − 40
+ − 41 memset (&junk, 0, sizeof (junk));
+ − 42
+ − 43 junk.sin_family = AF_INET;
+ − 44 junk.sin_addr.s_addr = htonl (INADDR_ANY); /* un*x sucks */
+ − 45 junk.sin_port = htons (atoi (argv[1])); /* un*x blows */
+ − 46
+ − 47 s = socket (PF_INET, SOCK_STREAM, 0);
+ − 48
+ − 49 bind (s, (struct sockaddr *)&junk, sizeof (junk));
+ − 50
+ − 51 listen (s, 1);
+ − 52
+ − 53 for (;;)
+ − 54 {
+ − 55 int loser = accept (s, NULL, 0);
+ − 56 close (loser);
+ − 57 }
+ − 58 }
+ − 59