fdevent.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * Copyright (C) 2006 The Android Open Source Project
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #ifndef __FDEVENT_H
  17. #define __FDEVENT_H
  18. #include <stdint.h> /* for int64_t */
  19. /* events that may be observed */
  20. #define FDE_READ 0x0001
  21. #define FDE_WRITE 0x0002
  22. #define FDE_ERROR 0x0004
  23. #define FDE_TIMEOUT 0x0008
  24. /* features that may be set (via the events set/add/del interface) */
  25. #define FDE_DONT_CLOSE 0x0080
  26. typedef struct fdevent fdevent;
  27. typedef void (*fd_func)(int fd, unsigned events, void *userdata);
  28. /* Allocate and initialize a new fdevent object
  29. * Note: use FD_TIMER as 'fd' to create a fd-less object
  30. * (used to implement timers).
  31. */
  32. fdevent *fdevent_create(int fd, fd_func func, void *arg);
  33. /* Uninitialize and deallocate an fdevent object that was
  34. ** created by fdevent_create()
  35. */
  36. void fdevent_destroy(fdevent *fde);
  37. /* Initialize an fdevent object that was externally allocated
  38. */
  39. void fdevent_install(fdevent *fde, int fd, fd_func func, void *arg);
  40. /* Uninitialize an fdevent object that was initialized by
  41. ** fdevent_install()
  42. */
  43. void fdevent_remove(fdevent *item);
  44. /* Change which events should cause notifications
  45. */
  46. void fdevent_set(fdevent *fde, unsigned events);
  47. void fdevent_add(fdevent *fde, unsigned events);
  48. void fdevent_del(fdevent *fde, unsigned events);
  49. void fdevent_set_timeout(fdevent *fde, int64_t timeout_ms);
  50. /* loop forever, handling events.
  51. */
  52. void fdevent_loop();
  53. struct fdevent
  54. {
  55. fdevent *next;
  56. fdevent *prev;
  57. int fd;
  58. int force_eof;
  59. unsigned short state;
  60. unsigned short events;
  61. fd_func func;
  62. void *arg;
  63. };
  64. #endif