root/opal/mca/event/libevent2022/libevent/test/test-weof.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. write_cb
  2. main

   1 /*
   2  * Copyright (c) 2002-2007 Niels Provos <provos@citi.umich.edu>
   3  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  * 1. Redistributions of source code must retain the above copyright
   9  *    notice, this list of conditions and the following disclaimer.
  10  * 2. Redistributions in binary form must reproduce the above copyright
  11  *    notice, this list of conditions and the following disclaimer in the
  12  *    documentation and/or other materials provided with the distribution.
  13  * 3. The name of the author may not be used to endorse or promote products
  14  *    derived from this software without specific prior written permission.
  15  *
  16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  21  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26  */
  27 #include "event2/event-config.h"
  28 
  29 #ifdef WIN32
  30 #include <winsock2.h>
  31 #else
  32 #include <unistd.h>
  33 #endif
  34 #include <sys/types.h>
  35 #include <sys/stat.h>
  36 #ifdef _EVENT_HAVE_SYS_TIME_H
  37 #include <sys/time.h>
  38 #endif
  39 #ifdef _EVENT_HAVE_SYS_SOCKET_H
  40 #include <sys/socket.h>
  41 #endif
  42 #include <fcntl.h>
  43 #include <stdlib.h>
  44 #include <stdio.h>
  45 #include <string.h>
  46 #include <signal.h>
  47 #include <errno.h>
  48 
  49 #include "event2/event.h"
  50 #include "event2/event_struct.h"
  51 #include "event2/event_compat.h"
  52 #include "event2/util.h"
  53 
  54 #ifdef _EVENT___func__
  55 #define __func__ _EVENT___func__
  56 #endif
  57 
  58 evutil_socket_t pair[2];
  59 int test_okay = 1;
  60 int called = 0;
  61 
  62 static void
  63 write_cb(evutil_socket_t fd, short event, void *arg)
  64 {
  65         const char *test = "test string";
  66         int len;
  67 
  68         len = send(fd, test, (int)strlen(test) + 1, 0);
  69 
  70         printf("%s: write %d%s\n", __func__,
  71             len, len ? "" : " - means EOF");
  72 
  73         if (len > 0) {
  74                 if (!called)
  75                         event_add(arg, NULL);
  76                 evutil_closesocket(pair[0]);
  77         } else if (called == 1)
  78                 test_okay = 0;
  79 
  80         called++;
  81 }
  82 
  83 int
  84 main(int argc, char **argv)
  85 {
  86         struct event ev;
  87 
  88 #ifdef WIN32
  89         WORD wVersionRequested;
  90         WSADATA wsaData;
  91 
  92         wVersionRequested = MAKEWORD(2, 2);
  93 
  94         (void) WSAStartup(wVersionRequested, &wsaData);
  95 #endif
  96 
  97 #ifndef WIN32
  98         if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
  99                 return (1);
 100 #endif
 101 
 102         if (evutil_socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1)
 103                 return (1);
 104 
 105         /* Initalize the event library */
 106         event_init();
 107 
 108         /* Initalize one event */
 109         event_set(&ev, pair[1], EV_WRITE, write_cb, &ev);
 110 
 111         event_add(&ev, NULL);
 112 
 113         event_dispatch();
 114 
 115         return (test_okay);
 116 }
 117 

/* [<][>][^][v][top][bottom][index][help] */