public.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /*
  2. * The contents of this file are subject to the Mozilla Public
  3. * License Version 1.1 (the "License"); you may not use this file
  4. * except in compliance with the License. You may obtain a copy of
  5. * the License at http://www.mozilla.org/MPL/
  6. *
  7. * Software distributed under the License is distributed on an "AS
  8. * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9. * implied. See the License for the specific language governing
  10. * rights and limitations under the License.
  11. *
  12. * The Original Code is the Netscape Portable Runtime library.
  13. *
  14. * The Initial Developer of the Original Code is Netscape
  15. * Communications Corporation. Portions created by Netscape are
  16. * Copyright (C) 1994-2000 Netscape Communications Corporation. All
  17. * Rights Reserved.
  18. *
  19. * Contributor(s): Silicon Graphics, Inc.
  20. *
  21. * Portions created by SGI are Copyright (C) 2000-2001 Silicon
  22. * Graphics, Inc. All Rights Reserved.
  23. *
  24. * Alternatively, the contents of this file may be used under the
  25. * terms of the GNU General Public License Version 2 or later (the
  26. * "GPL"), in which case the provisions of the GPL are applicable
  27. * instead of those above. If you wish to allow use of your
  28. * version of this file only under the terms of the GPL and not to
  29. * allow others to use your version of this file under the MPL,
  30. * indicate your decision by deleting the provisions above and
  31. * replace them with the notice and other provisions required by
  32. * the GPL. If you do not delete the provisions above, a recipient
  33. * may use your version of this file under either the MPL or the
  34. * GPL.
  35. */
  36. #ifndef __ST_THREAD_H__
  37. #define __ST_THREAD_H__
  38. #include <unistd.h>
  39. #include <sys/types.h>
  40. #include <sys/socket.h>
  41. #include <sys/uio.h>
  42. #include <time.h>
  43. #include <errno.h>
  44. #include <poll.h>
  45. #define ST_VERSION "1.9"
  46. #define ST_VERSION_MAJOR 1
  47. #define ST_VERSION_MINOR 9
  48. /* Undefine this to remove the context switch callback feature. */
  49. #define ST_SWITCH_CB
  50. #ifndef ETIME
  51. #define ETIME ETIMEDOUT
  52. #endif
  53. #ifndef ST_UTIME_NO_TIMEOUT
  54. #define ST_UTIME_NO_TIMEOUT ((st_utime_t) -1LL)
  55. #endif
  56. #ifndef ST_UTIME_NO_WAIT
  57. #define ST_UTIME_NO_WAIT 0
  58. #endif
  59. #define ST_EVENTSYS_DEFAULT 0
  60. #define ST_EVENTSYS_SELECT 1
  61. #define ST_EVENTSYS_POLL 2
  62. #define ST_EVENTSYS_ALT 3
  63. #ifdef __cplusplus
  64. extern "C" {
  65. #endif
  66. typedef unsigned long long st_utime_t;
  67. typedef struct _st_thread * st_thread_t;
  68. typedef struct _st_cond * st_cond_t;
  69. typedef struct _st_mutex * st_mutex_t;
  70. typedef struct _st_netfd * st_netfd_t;
  71. #ifdef ST_SWITCH_CB
  72. typedef void (*st_switch_cb_t)(void);
  73. #endif
  74. extern int st_init(void);
  75. extern int st_getfdlimit(void);
  76. extern int st_set_eventsys(int eventsys);
  77. extern int st_get_eventsys(void);
  78. extern const char *st_get_eventsys_name(void);
  79. #ifdef ST_SWITCH_CB
  80. extern st_switch_cb_t st_set_switch_in_cb(st_switch_cb_t cb);
  81. extern st_switch_cb_t st_set_switch_out_cb(st_switch_cb_t cb);
  82. #endif
  83. extern st_thread_t st_thread_self(void);
  84. extern void st_thread_exit(void *retval);
  85. extern int st_thread_join(st_thread_t thread, void **retvalp);
  86. extern void st_thread_interrupt(st_thread_t thread);
  87. extern st_thread_t st_thread_create(void *(*start)(void *arg), void *arg, int joinable, int stack_size);
  88. extern int st_randomize_stacks(int on);
  89. extern int st_set_utime_function(st_utime_t (*func)(void));
  90. extern st_utime_t st_utime(void);
  91. extern st_utime_t st_utime_last_clock(void);
  92. extern int st_timecache_set(int on);
  93. extern time_t st_time(void);
  94. extern int st_usleep(st_utime_t usecs);
  95. extern int st_sleep(int secs);
  96. extern st_cond_t st_cond_new(void);
  97. extern int st_cond_destroy(st_cond_t cvar);
  98. extern int st_cond_timedwait(st_cond_t cvar, st_utime_t timeout);
  99. extern int st_cond_wait(st_cond_t cvar);
  100. extern int st_cond_signal(st_cond_t cvar);
  101. extern int st_cond_broadcast(st_cond_t cvar);
  102. extern st_mutex_t st_mutex_new(void);
  103. extern int st_mutex_destroy(st_mutex_t lock);
  104. extern int st_mutex_lock(st_mutex_t lock);
  105. extern int st_mutex_unlock(st_mutex_t lock);
  106. extern int st_mutex_trylock(st_mutex_t lock);
  107. extern int st_key_create(int *keyp, void (*destructor)(void *));
  108. extern int st_key_getlimit(void);
  109. extern int st_thread_setspecific(int key, void *value);
  110. extern void *st_thread_getspecific(int key);
  111. extern st_netfd_t st_netfd_open(int osfd);
  112. extern st_netfd_t st_netfd_open_socket(int osfd);
  113. extern void st_netfd_free(st_netfd_t fd);
  114. extern int st_netfd_close(st_netfd_t fd);
  115. extern int st_netfd_fileno(st_netfd_t fd);
  116. extern void st_netfd_setspecific(st_netfd_t fd, void *value, void (*destructor)(void *));
  117. extern void *st_netfd_getspecific(st_netfd_t fd);
  118. extern int st_netfd_serialize_accept(st_netfd_t fd);
  119. extern int st_netfd_poll(st_netfd_t fd, int how, st_utime_t timeout);
  120. extern int st_poll(struct pollfd *pds, int npds, st_utime_t timeout);
  121. extern st_netfd_t st_accept(st_netfd_t fd, struct sockaddr *addr, int *addrlen, st_utime_t timeout);
  122. extern int st_connect(st_netfd_t fd, const struct sockaddr *addr, int addrlen, st_utime_t timeout);
  123. extern ssize_t st_read(st_netfd_t fd, void *buf, size_t nbyte, st_utime_t timeout);
  124. extern ssize_t st_read_fully(st_netfd_t fd, void *buf, size_t nbyte, st_utime_t timeout);
  125. extern int st_read_resid(st_netfd_t fd, void *buf, size_t *resid, st_utime_t timeout);
  126. extern ssize_t st_readv(st_netfd_t fd, const struct iovec *iov, int iov_size, st_utime_t timeout);
  127. extern int st_readv_resid(st_netfd_t fd, struct iovec **iov, int *iov_size, st_utime_t timeout);
  128. extern ssize_t st_write(st_netfd_t fd, const void *buf, size_t nbyte, st_utime_t timeout);
  129. extern int st_write_resid(st_netfd_t fd, const void *buf, size_t *resid, st_utime_t timeout);
  130. extern ssize_t st_writev(st_netfd_t fd, const struct iovec *iov, int iov_size, st_utime_t timeout);
  131. extern int st_writev_resid(st_netfd_t fd, struct iovec **iov, int *iov_size, st_utime_t timeout);
  132. extern int st_recvfrom(st_netfd_t fd, void *buf, int len, struct sockaddr *from, int *fromlen, st_utime_t timeout);
  133. extern int st_sendto(st_netfd_t fd, const void *msg, int len, const struct sockaddr *to, int tolen, st_utime_t timeout);
  134. extern int st_recvmsg(st_netfd_t fd, struct msghdr *msg, int flags, st_utime_t timeout);
  135. extern int st_sendmsg(st_netfd_t fd, const struct msghdr *msg, int flags, st_utime_t timeout);
  136. extern st_netfd_t st_open(const char *path, int oflags, mode_t mode);
  137. #ifdef DEBUG
  138. extern void _st_show_thread_stack(st_thread_t thread, const char *messg);
  139. extern void _st_iterate_threads(void);
  140. #endif
  141. #ifdef __cplusplus
  142. }
  143. #endif
  144. #endif /* !__ST_THREAD_H__ */