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

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

DEFINITIONS

This source file includes following definitions.
  1. read_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 <errno.h>
  47 
  48 #include <event.h>
  49 #include <evutil.h>
  50 
  51 #ifdef _EVENT___func__
  52 #define __func__ _EVENT___func__
  53 #endif
  54 
  55 int test_okay = 1;
  56 int called = 0;
  57 struct timeval timeout = {60, 0};
  58 
  59 static void
  60 read_cb(evutil_socket_t fd, short event, void *arg)
  61 {
  62         char buf[256];
  63         int len;
  64 
  65         if (EV_TIMEOUT & event) {
  66                 printf("%s: Timeout!\n", __func__);
  67                 exit(1);
  68         }
  69 
  70         len = recv(fd, buf, sizeof(buf), 0);
  71 
  72         printf("%s: read %d%s\n", __func__,
  73             len, len ? "" : " - means EOF");
  74 
  75         if (len) {
  76                 if (!called)
  77                         event_add(arg, &timeout);
  78         } else if (called == 1)
  79                 test_okay = 0;
  80 
  81         called++;
  82 }
  83 
  84 #ifndef SHUT_WR
  85 #define SHUT_WR 1
  86 #endif
  87 
  88 int
  89 main(int argc, char **argv)
  90 {
  91         struct event ev;
  92         const char *test = "test string";
  93         evutil_socket_t pair[2];
  94 
  95 #ifdef WIN32
  96         WORD wVersionRequested;
  97         WSADATA wsaData;
  98 
  99         wVersionRequested = MAKEWORD(2, 2);
 100 
 101         (void) WSAStartup(wVersionRequested, &wsaData);
 102 #endif
 103 
 104         if (evutil_socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1)
 105                 return (1);
 106 
 107 
 108         if (send(pair[0], test, (int)strlen(test)+1, 0) < 0)
 109                 return (1);
 110         shutdown(pair[0], SHUT_WR);
 111 
 112         /* Initalize the event library */
 113         event_init();
 114 
 115         /* Initalize one event */
 116         event_set(&ev, pair[1], EV_READ | EV_TIMEOUT, read_cb, &ev);
 117 
 118         event_add(&ev, &timeout);
 119 
 120         event_dispatch();
 121 
 122         return (test_okay);
 123 }
 124 

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