pvxslibs 1.3.2a1__tar.gz → 1.3.3a1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pvxslibs might be problematic. Click here for more details.

Files changed (256) hide show
  1. {pvxslibs-1.3.2a1/python/pvxslibs.egg-info → pvxslibs-1.3.3a1}/PKG-INFO +1 -1
  2. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/configure/CONFIG_PVXS_VERSION +3 -2
  3. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/groupconfigprocessor.cpp +1 -1
  4. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/groupprocessorcontext.cpp +3 -5
  5. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/groupsource.cpp +1 -1
  6. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/groupsourcehooks.cpp +29 -1
  7. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/pvalink_lset.cpp +1 -1
  8. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/qsrvpvt.h +1 -1
  9. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/singlesource.cpp +1 -1
  10. pvxslibs-1.3.3a1/pyproject.toml +8 -0
  11. pvxslibs-1.3.3a1/python/pvxslibs/ioc.py +10 -0
  12. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1/python/pvxslibs.egg-info}/PKG-INFO +1 -1
  13. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/python/pvxslibs.egg-info/SOURCES.txt +1 -0
  14. pvxslibs-1.3.3a1/python/pvxslibs.egg-info/requires.txt +2 -0
  15. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/client.cpp +18 -12
  16. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/clientconn.cpp +15 -2
  17. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/clientimpl.h +9 -1
  18. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/clientmon.cpp +1 -1
  19. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/datafmt.cpp +16 -13
  20. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/serverconn.cpp +29 -19
  21. pvxslibs-1.3.2a1/pyproject.toml +0 -2
  22. pvxslibs-1.3.2a1/python/pvxslibs.egg-info/requires.txt +0 -2
  23. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/COPYRIGHT +0 -0
  24. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/LICENSE +0 -0
  25. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/MANIFEST.in +0 -0
  26. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/README.md +0 -0
  27. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/LICENSE +0 -0
  28. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/arc4random.c +0 -0
  29. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/buffer.c +0 -0
  30. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/buffer_iocp.c +0 -0
  31. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/bufferevent-internal.h +0 -0
  32. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/bufferevent.c +0 -0
  33. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/bufferevent_async.c +0 -0
  34. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/bufferevent_filter.c +0 -0
  35. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/bufferevent_mbedtls.c +0 -0
  36. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/bufferevent_openssl.c +0 -0
  37. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/bufferevent_pair.c +0 -0
  38. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/bufferevent_ratelim.c +0 -0
  39. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/bufferevent_sock.c +0 -0
  40. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/bufferevent_ssl.c +0 -0
  41. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/changelist-internal.h +0 -0
  42. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/cmake/VersionViaGit.cmake +0 -0
  43. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/compat/sys/queue.h +0 -0
  44. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/defer-internal.h +0 -0
  45. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/devpoll.c +0 -0
  46. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/epoll.c +0 -0
  47. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/epoll_sub.c +0 -0
  48. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/epolltable-internal.h +0 -0
  49. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evbuffer-internal.h +0 -0
  50. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evconfig-private.h.cmake +0 -0
  51. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evdns.c +0 -0
  52. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/event-config.h.cmake +0 -0
  53. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/event-internal.h +0 -0
  54. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/event.c +0 -0
  55. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/event_iocp.c +0 -0
  56. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/event_tagging.c +0 -0
  57. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evmap-internal.h +0 -0
  58. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evmap.c +0 -0
  59. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evport.c +0 -0
  60. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evrpc-internal.h +0 -0
  61. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evrpc.c +0 -0
  62. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evsignal-internal.h +0 -0
  63. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evthread-internal.h +0 -0
  64. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evthread.c +0 -0
  65. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evthread_pthread.c +0 -0
  66. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evthread_win32.c +0 -0
  67. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evutil.c +0 -0
  68. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evutil_rand.c +0 -0
  69. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/evutil_time.c +0 -0
  70. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/ht-internal.h +0 -0
  71. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/http-internal.h +0 -0
  72. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/http.c +0 -0
  73. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/evdns.h +0 -0
  74. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event.h +0 -0
  75. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/buffer.h +0 -0
  76. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/buffer_compat.h +0 -0
  77. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/bufferevent.h +0 -0
  78. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/bufferevent_compat.h +0 -0
  79. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/bufferevent_ssl.h +0 -0
  80. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/bufferevent_struct.h +0 -0
  81. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/dns.h +0 -0
  82. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/dns_compat.h +0 -0
  83. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/dns_struct.h +0 -0
  84. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/event.h +0 -0
  85. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/event_compat.h +0 -0
  86. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/event_struct.h +0 -0
  87. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/http.h +0 -0
  88. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/http_compat.h +0 -0
  89. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/http_struct.h +0 -0
  90. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/keyvalq_struct.h +0 -0
  91. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/listener.h +0 -0
  92. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/rpc.h +0 -0
  93. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/rpc_compat.h +0 -0
  94. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/rpc_struct.h +0 -0
  95. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/tag.h +0 -0
  96. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/tag_compat.h +0 -0
  97. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/thread.h +0 -0
  98. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/util.h +0 -0
  99. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/visibility.h +0 -0
  100. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/watch.h +0 -0
  101. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/event2/ws.h +0 -0
  102. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/evhttp.h +0 -0
  103. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/evrpc.h +0 -0
  104. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/include/evutil.h +0 -0
  105. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/iocp-internal.h +0 -0
  106. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/ipv6-internal.h +0 -0
  107. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/kqueue-internal.h +0 -0
  108. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/kqueue.c +0 -0
  109. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/listener.c +0 -0
  110. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/log-internal.h +0 -0
  111. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/log.c +0 -0
  112. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/mbedtls-compat.h +0 -0
  113. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/minheap-internal.h +0 -0
  114. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/mm-internal.h +0 -0
  115. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/openssl-compat.h +0 -0
  116. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/poll.c +0 -0
  117. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/ratelim-internal.h +0 -0
  118. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/select.c +0 -0
  119. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/sha1.c +0 -0
  120. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/sha1.h +0 -0
  121. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/signal.c +0 -0
  122. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/signalfd.c +0 -0
  123. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/ssl-compat.h +0 -0
  124. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/strlcpy-internal.h +0 -0
  125. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/strlcpy.c +0 -0
  126. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/time-internal.h +0 -0
  127. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/util-internal.h +0 -0
  128. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/watch.c +0 -0
  129. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/wepoll.c +0 -0
  130. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/wepoll.h +0 -0
  131. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/win32select.c +0 -0
  132. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/bundle/libevent/ws.c +0 -0
  133. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/channel.cpp +0 -0
  134. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/channel.h +0 -0
  135. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/credentials.cpp +0 -0
  136. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/credentials.h +0 -0
  137. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/dbentry.h +0 -0
  138. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/dberrormessage.cpp +0 -0
  139. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/dberrormessage.h +0 -0
  140. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/dbeventcontextdeleter.h +0 -0
  141. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/dblocker.h +0 -0
  142. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/dbmanylocker.h +0 -0
  143. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/demo.cpp +0 -0
  144. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/dummygroup.cpp +0 -0
  145. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/dummysingle.cpp +0 -0
  146. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/field.cpp +0 -0
  147. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/field.h +0 -0
  148. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/fieldconfig.h +0 -0
  149. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/fielddefinition.cpp +0 -0
  150. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/fielddefinition.h +0 -0
  151. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/fieldname.cpp +0 -0
  152. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/fieldname.h +0 -0
  153. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/fieldnamecomponent.h +0 -0
  154. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/fieldsubscriptionctx.cpp +0 -0
  155. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/fieldsubscriptionctx.h +0 -0
  156. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/group.cpp +0 -0
  157. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/group.h +0 -0
  158. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/groupconfig.h +0 -0
  159. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/groupconfigprocessor.h +0 -0
  160. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/groupdefinition.h +0 -0
  161. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/groupprocessorcontext.h +0 -0
  162. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/groupsource.h +0 -0
  163. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/groupsrcsubscriptionctx.h +0 -0
  164. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/imagedemo.c +0 -0
  165. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/iochooks.cpp +0 -0
  166. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/iocshargument.h +0 -0
  167. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/iocshcommand.h +0 -0
  168. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/iocshindex.h +0 -0
  169. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/iocsource.cpp +0 -0
  170. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/iocsource.h +0 -0
  171. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/localfieldlog.cpp +0 -0
  172. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/localfieldlog.h +0 -0
  173. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/pvalink.cpp +0 -0
  174. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/pvalink.h +0 -0
  175. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/pvalink_channel.cpp +0 -0
  176. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/pvalink_jlif.cpp +0 -0
  177. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/pvalink_link.cpp +0 -0
  178. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/pvxs/iochooks.h +0 -0
  179. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/pvxs3x.dbd +0 -0
  180. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/pvxs7x.dbd +0 -0
  181. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/securityclient.cpp +0 -0
  182. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/securityclient.h +0 -0
  183. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/securitylogger.h +0 -0
  184. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/singlesource.h +0 -0
  185. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/singlesourcehooks.cpp +0 -0
  186. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/singlesrcsubscriptionctx.cpp +0 -0
  187. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/singlesrcsubscriptionctx.h +0 -0
  188. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/subscriptionctx.h +0 -0
  189. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/typeutils.cpp +0 -0
  190. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/typeutils.h +0 -0
  191. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/ioc/yajlcallbackhandler.h +0 -0
  192. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/python/pvxslibs/__init__.py +0 -0
  193. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/python/pvxslibs/lib/__init__.py +0 -0
  194. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/python/pvxslibs/path.py +0 -0
  195. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/python/pvxslibs/test/__init__.py +0 -0
  196. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/python/pvxslibs/test/test_load.py +0 -0
  197. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/python/pvxslibs/version.py +0 -0
  198. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/python/pvxslibs.egg-info/dependency_links.txt +0 -0
  199. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/python/pvxslibs.egg-info/not-zip-safe +0 -0
  200. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/python/pvxslibs.egg-info/top_level.txt +0 -0
  201. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/setup.cfg +0 -0
  202. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/setup.py +0 -0
  203. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/bitmask.cpp +0 -0
  204. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/bitmask.h +0 -0
  205. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/clientdiscover.cpp +0 -0
  206. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/clientget.cpp +0 -0
  207. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/clientintrospect.cpp +0 -0
  208. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/clientreq.cpp +0 -0
  209. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/config.cpp +0 -0
  210. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/conn.cpp +0 -0
  211. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/conn.h +0 -0
  212. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/data.cpp +0 -0
  213. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/dataencode.cpp +0 -0
  214. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/dataimpl.h +0 -0
  215. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/describe.cpp +0 -0
  216. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/describe.h@ +0 -0
  217. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/evhelper.cpp +0 -0
  218. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/evhelper.h +0 -0
  219. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/log.cpp +0 -0
  220. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/nt.cpp +0 -0
  221. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/os/WIN32/osdSockExt.cpp +0 -0
  222. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/os/default/osdSockExt.cpp +0 -0
  223. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/osgroups.cpp +0 -0
  224. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/osiSockExt.h +0 -0
  225. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvaproto.h +0 -0
  226. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvrequest.cpp +0 -0
  227. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvrequest.h +0 -0
  228. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/client.h +0 -0
  229. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/data.h +0 -0
  230. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/log.h +0 -0
  231. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/netcommon.h +0 -0
  232. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/nt.h +0 -0
  233. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/server.h +0 -0
  234. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/sharedArray.h +0 -0
  235. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/sharedpv.h +0 -0
  236. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/source.h +0 -0
  237. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/srvcommon.h +0 -0
  238. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/unittest.h +0 -0
  239. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/util.h +0 -0
  240. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/version.h +0 -0
  241. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/pvxs/versionNum.h@ +0 -0
  242. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/server.cpp +0 -0
  243. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/serverchan.cpp +0 -0
  244. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/serverconn.h +0 -0
  245. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/serverget.cpp +0 -0
  246. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/serverintrospect.cpp +0 -0
  247. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/servermon.cpp +0 -0
  248. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/serversource.cpp +0 -0
  249. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/sharedarray.cpp +0 -0
  250. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/sharedpv.cpp +0 -0
  251. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/type.cpp +0 -0
  252. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/udp_collector.cpp +0 -0
  253. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/udp_collector.h +0 -0
  254. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/unittest.cpp +0 -0
  255. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/util.cpp +0 -0
  256. {pvxslibs-1.3.2a1 → pvxslibs-1.3.3a1}/src/utilpvt.h +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pvxslibs
3
- Version: 1.3.2a1
3
+ Version: 1.3.3a1
4
4
  Summary: PVXS libraries packaged for python
5
5
  Home-page: https://epics-base.github.io/pvxs
6
6
  Author: Michael Davidsaver
@@ -1,6 +1,6 @@
1
1
  PVXS_MAJOR_VERSION = 1
2
2
  PVXS_MINOR_VERSION = 3
3
- PVXS_MAINTENANCE_VERSION = 2
3
+ PVXS_MAINTENANCE_VERSION = 3
4
4
 
5
5
  # Version range conditions in Makefiles
6
6
  #
@@ -12,7 +12,8 @@ PVXS_MAINTENANCE_VERSION = 2
12
12
  #
13
13
  # ifneq ($(PVXS_X_Y_Z),YES) # PVXS != X.Y.Z
14
14
  #
15
- PVXS_1_3_2 = YES
15
+ PVXS_1_3_3 = YES
16
+ PVXS_1_3_2 = NO
16
17
  PVXS_1_3_1 = NO
17
18
  PVXS_1_3_0 = NO
18
19
  PVXS_1_2_4 = NO
@@ -225,7 +225,7 @@ void GroupConfigProcessor::defineFields(GroupDefinition& groupDefinition, const
225
225
  }
226
226
 
227
227
  if(fieldName.empty() && fieldConfig.info.type!=MappingInfo::Meta) {
228
- fprintf(stderr, "%s.%s Error: only +type:\"meta\" map be mapped at struct top\n",
228
+ fprintf(stderr, "%s.%s Error: only +type:\"meta\" can be mapped at struct top\n",
229
229
  groupName.c_str(), fieldName.c_str());
230
230
  continue;
231
231
  }
@@ -33,8 +33,7 @@ void GroupProcessorContext::assign(const Value& value) {
33
33
  groupPvConfig.structureId = value.as<std::string>();
34
34
 
35
35
  } else {
36
- groupConfigProcessor->groupProcessingWarnings += "Unknown group option ";
37
- groupConfigProcessor->groupProcessingWarnings += field;
36
+ groupConfigProcessor->groupProcessingWarnings += SB()<<"Unknown group option: \""<<field<<"\"\n";
38
37
  }
39
38
  field.clear();
40
39
 
@@ -59,7 +58,7 @@ void GroupProcessorContext::assign(const Value& value) {
59
58
  } else if(tname == "const") {
60
59
  type = MappingInfo::Const;
61
60
  } else {
62
- groupConfigProcessor->groupProcessingWarnings += SB()<<"Unknown mapping +type:\""<<tname<<"\" ignored";
61
+ groupConfigProcessor->groupProcessingWarnings += SB()<<"Unknown mapping +type:\""<<tname<<"\" ignored\n";
63
62
  }
64
63
  groupField.info.type = type;
65
64
 
@@ -82,8 +81,7 @@ void GroupProcessorContext::assign(const Value& value) {
82
81
  groupField.info.cval = value;
83
82
 
84
83
  } else {
85
- groupConfigProcessor->groupProcessingWarnings += "Unknown group field option ";
86
- groupConfigProcessor->groupProcessingWarnings += field + ":" + key;
84
+ groupConfigProcessor->groupProcessingWarnings += SB()<<"Unknown group field option: \""<<field<<":"<<key<<"\"\n";
87
85
  }
88
86
  key.clear();
89
87
  }
@@ -159,7 +159,7 @@ void GroupSource::onOp(Group& group,
159
159
  });
160
160
 
161
161
  // Make a security cache for this client's connection to this group
162
- // Each time the same client calls put we will re-use the cached security client
162
+ // Each time the same client calls put we will reuse the cached security client
163
163
  // The security cache will be deleted when the client disconnects from this group pv
164
164
  auto securityCache = std::make_shared<GroupSecurityCache>();
165
165
 
@@ -16,6 +16,8 @@
16
16
  #include <iocsh.h>
17
17
 
18
18
  #include <initHooks.h>
19
+ #include <iocInit.h>
20
+ #include <dbAccess.h>
19
21
 
20
22
  #include <pvxs/source.h>
21
23
  #include <pvxs/iochooks.h>
@@ -28,6 +30,9 @@
28
30
  #if EPICS_VERSION_INT < VERSION_INT(7, 0, 3, 1)
29
31
  # define iocshSetError(ret) do { (void)ret; }while(0)
30
32
  #endif
33
+ #ifndef ERL_ERROR
34
+ # define ERL_ERROR "ERROR"
35
+ #endif
31
36
 
32
37
  // include last to avoid clash of #define printf with other headers
33
38
  #include <epicsStdio.h>
@@ -42,7 +47,6 @@ namespace ioc {
42
47
  static
43
48
  void dbLoadGroupCmd(const char* jsonFileName, const char *macros) {
44
49
  iocshSetError(!!dbLoadGroup(jsonFileName, macros));
45
- GroupConfigProcessor().loadConfigFiles();
46
50
  }
47
51
 
48
52
  /**
@@ -96,6 +100,30 @@ const auto dbLoadGroupMsg =
96
100
 
97
101
  long dbLoadGroup(const char* jsonFilename, const char* macros) {
98
102
  try {
103
+ /* getIocState() introduced to the 3.15 branch in R3.15.8
104
+ * 7.0 branch in R7.0.4
105
+ */
106
+ #if EPICS_VERSION_INT >= VERSION_INT(7, 0, 4, 0) \
107
+ || (EPICS_VERSION_INT < VERSION_INT(7, 0, 0, 0) && EPICS_VERSION_INT >= VERSION_INT(3, 15, 8, 0))
108
+ if(getIocState() != iocVoid)
109
+ {
110
+ fprintf(stderr,
111
+ ERL_ERROR " dbLoadGroup() not allowed in current IOC state (%d).\n"
112
+ " Hint: Move before iocInit()\n",
113
+ getIocState()
114
+ );
115
+ return 1;
116
+ }
117
+ #else
118
+ if(interruptAccept)
119
+ {
120
+ fprintf(stderr,
121
+ ERL_ERROR " dbLoadGroup() not allowed in current IOC state.\n"
122
+ " Hint: Move before iocInit()\n");
123
+ return 1;
124
+ }
125
+ #endif
126
+
99
127
  if (!jsonFilename || !jsonFilename[0]) {
100
128
  fprintf(stderr, "%s\n"
101
129
  "Error: Missing required JSON filename\n", dbLoadGroupMsg);
@@ -85,7 +85,7 @@ void pvaOpenLink(DBLINK *plink) noexcept
85
85
  linkGlobal_t::channels_t::iterator it(linkGlobal->channels.find(key));
86
86
 
87
87
  if(it!=linkGlobal->channels.end()) {
88
- // re-use existing channel
88
+ // reuse existing channel
89
89
  chan = it->second.lock();
90
90
  }
91
91
 
@@ -40,7 +40,7 @@ static inline void resetGroups() {}
40
40
  #if EPICS_VERSION_INT >= VERSION_INT(7, 0, 4, 0)
41
41
  # define USE_DEINIT_HOOKS
42
42
  #endif
43
- #if EPICS_VERSION_INT > VERSION_INT(7, 0, 7, 0)
43
+ #if EPICS_VERSION_INT >= VERSION_INT(7, 0, 8, 0)
44
44
  # define USE_PREPARE_CLEANUP_HOOKS
45
45
  #endif
46
46
 
@@ -304,7 +304,7 @@ void onOp(const std::shared_ptr<SingleInfo>& sInfo, const Value& valuePrototype,
304
304
  });
305
305
 
306
306
  // Make a security cache for this client's connection to this pv
307
- // Each time the same client calls put we will re-use the cached security client
307
+ // Each time the same client calls put we will reuse the cached security client
308
308
  // The security cache will be deleted when the client disconnects from this pv
309
309
  auto putOperationCache = std::make_shared<PutOperationCache>();
310
310
 
@@ -0,0 +1,8 @@
1
+ [build-system]
2
+ requires = [
3
+ "setuptools",
4
+ "wheel",
5
+ "setuptools_dso>=2.7a1",
6
+ "setuptools_dso>=2.11a2; python_version >= '3.12'",
7
+ "epicscorelibs>=7.0.7.99.1.2a1",
8
+ ]
@@ -0,0 +1,10 @@
1
+ import os
2
+
3
+ from epicscorelibs import ioc
4
+ import pvxslibs.path
5
+
6
+ if __name__ == "__main__":
7
+ os.environ.setdefault("PVXS_QSRV_ENABLE", "YES")
8
+ pvxs_dbd_load = (("pvxsIoc.dbd", pvxslibs.path.dbd_path), )
9
+ pvxs_dso_load = ("pvxslibs.lib.pvxsIoc", )
10
+ ioc.main(extra_dbd_load=pvxs_dbd_load, extra_dso_load=pvxs_dso_load)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pvxslibs
3
- Version: 1.3.2a1
3
+ Version: 1.3.3a1
4
4
  Summary: PVXS libraries packaged for python
5
5
  Home-page: https://epics-base.github.io/pvxs
6
6
  Author: Michael Davidsaver
@@ -178,6 +178,7 @@ ioc/typeutils.h
178
178
  ioc/yajlcallbackhandler.h
179
179
  ioc/pvxs/iochooks.h
180
180
  python/pvxslibs/__init__.py
181
+ python/pvxslibs/ioc.py
181
182
  python/pvxslibs/path.py
182
183
  python/pvxslibs/version.py
183
184
  python/pvxslibs.egg-info/PKG-INFO
@@ -0,0 +1,2 @@
1
+ setuptools_dso>=2.7a1
2
+ epicscorelibs<7.0.7.99.2,>=7.0.7.99.1.2a1
@@ -798,7 +798,7 @@ void ContextImpl::onBeacon(const UDPManager::Beacon& msg)
798
798
  cur.guid = msg.guid;
799
799
  cur.peerVersion = msg.peerVersion;
800
800
  cur.time = now;
801
- // don't trigger if sender changes as server (mis)configuration
801
+ // don't trigger if sender changes as server configuration
802
802
  // could see beacons reach us from multiple interfaces.
803
803
  cur.sender = msg.src;
804
804
 
@@ -904,6 +904,7 @@ void procSearchReply(ContextImpl& self, const SockAddr& src, uint8_t peerVersion
904
904
  chan->conn = Connection::build(self.shared_from_this(), serv);
905
905
 
906
906
  chan->conn->pending[chan->cid] = chan;
907
+ chan->nSearch = 0u;
907
908
  chan->state = Channel::Connecting;
908
909
 
909
910
  chan->conn->createChannels();
@@ -1145,37 +1146,42 @@ void ContextImpl::tickSearch(SearchKind kind, bool poked)
1145
1146
  to_wire(H, Header{CMD_SEARCH, 0, uint32_t(consumed-8u)});
1146
1147
  }
1147
1148
  for(auto& pair : searchDest) {
1148
- auto& dest = pair.first.addr.family()==AF_INET ? searchTx4 : searchTx6;
1149
+ auto& dest = pair.dest.addr.family()==AF_INET ? searchTx4 : searchTx6;
1149
1150
 
1150
- if(pair.second) {
1151
+ if(pair.isucast) {
1151
1152
  *pflags |= pva_search_flags::Unicast;
1152
1153
 
1153
1154
  } else {
1154
1155
  *pflags &= ~pva_search_flags::Unicast;
1155
1156
 
1156
- dest.mcast_prep_sendto(pair.first);
1157
+ dest.mcast_prep_sendto(pair.dest);
1157
1158
  }
1158
1159
 
1159
1160
  int ntx = sendto(dest.sock, (char*)searchMsg.data(), consumed, 0,
1160
- &pair.first.addr->sa, pair.first.addr.size());
1161
+ &pair.dest.addr->sa, pair.dest.addr.size());
1161
1162
 
1162
1163
  if(ntx<0) {
1163
1164
  int err = evutil_socket_geterror(dest.sock);
1164
1165
  auto lvl = Level::Warn;
1165
- if(err==EINTR || err==EPERM)
1166
+ if(err==EINTR || err==EPERM || !pair.lastSuccess)
1166
1167
  lvl = Level::Debug;
1167
1168
  log_printf(io, lvl, "Search tx %s error (%d) %s\n",
1168
- pair.first.addr.tostring().c_str(), err, evutil_socket_error_to_string(err));
1169
+ pair.dest.addr.tostring().c_str(), err, evutil_socket_error_to_string(err));
1170
+ pair.lastSuccess = false;
1169
1171
 
1170
1172
  } else if(unsigned(ntx)<consumed) {
1171
- log_warn_printf(io, "Search truncated %u < %u",
1173
+ log_warn_printf(io, "Search tx truncated %u < %u",
1172
1174
  unsigned(ntx), unsigned(consumed));
1173
1175
 
1174
1176
  } else {
1175
- log_hex_printf(io, Level::Debug, (char*)searchMsg.data(), consumed,
1176
- "Search to %s %s\n",
1177
- std::string(SB()<<pair.first).c_str(),
1178
- pair.second ? "ucast" : "bcast");
1177
+ auto lvl = Level::Info;
1178
+ if(pair.lastSuccess)
1179
+ lvl = Level::Debug;
1180
+ log_hex_printf(io, lvl, (char*)searchMsg.data(), consumed,
1181
+ "Search tx %s %s\n",
1182
+ std::string(SB()<<pair.dest).c_str(),
1183
+ pair.isucast ? "ucast" : "bcast");
1184
+ pair.lastSuccess = true;
1179
1185
  }
1180
1186
  }
1181
1187
  *pflags |= 0x80; // TCP search is always "unicast"
@@ -71,8 +71,16 @@ void Connection::startConnecting()
71
71
  timeval tmo(totv(context->effective.tcpTimeout));
72
72
  bufferevent_set_timeouts(bev.get(), &tmo, &tmo);
73
73
 
74
- if(bufferevent_socket_connect(bev.get(), const_cast<sockaddr*>(&peerAddr->sa), peerAddr.size()))
75
- throw std::runtime_error("Unable to begin connecting");
74
+ if(bufferevent_socket_connect(bev.get(), const_cast<sockaddr*>(&peerAddr->sa), peerAddr.size())) {
75
+ // non-blocking connect() failed immediately.
76
+ // try to defer notification.
77
+ state = Disconnected;
78
+ constexpr timeval immediate{0, 0};
79
+ if(event_add(echoTimer.get(), &immediate))
80
+ throw std::runtime_error(SB()<<"Unable to begin connecting or schedule deferred notification "<<peerName);
81
+ log_warn_printf(io, "Unable to connect() to %s\n", peerName.c_str());
82
+ return;
83
+ }
76
84
 
77
85
  connect(std::move(bev));
78
86
 
@@ -480,6 +488,11 @@ void Connection::tickEcho()
480
488
 
481
489
  startConnecting();
482
490
 
491
+ }else if(state==Disconnected) {
492
+ // deferred notification of early connect() failure.
493
+ // TODO: avoid a misleading "closed by peer" error
494
+ bevEvent(BEV_EVENT_EOF);
495
+
483
496
  } else {
484
497
  log_debug_printf(io, "Server %s ping\n", peerName.c_str());
485
498
 
@@ -86,6 +86,7 @@ struct Connection final : public ConnBase, public std::enable_shared_from_this<C
86
86
 
87
87
  // While HoldOff, the time until re-connection
88
88
  // While Connected, periodic Echo
89
+ // After early connect() failure, deferred notification
89
90
  const evevent echoTimer;
90
91
 
91
92
  bool ready = false;
@@ -288,7 +289,14 @@ struct ContextImpl : public std::enable_shared_from_this<ContextImpl>
288
289
  std::vector<uint8_t> searchMsg;
289
290
 
290
291
  // search destination address and whether to set the unicast flag
291
- std::vector<std::pair<SockEndpoint, bool>> searchDest;
292
+ struct SearchDest {
293
+ const SockEndpoint dest;
294
+ const bool isucast;
295
+ bool lastSuccess = true;
296
+ SearchDest(SockEndpoint dest, bool isu) :dest(dest), isucast(isu) {}
297
+ };
298
+
299
+ std::vector<SearchDest> searchDest;
292
300
 
293
301
  size_t currentBucket = 0u;
294
302
  // Channels where we have yet to send out an initial search request
@@ -242,7 +242,7 @@ struct SubscriptionImpl final : public OperationBase, public Subscription
242
242
  loop.call([this, &ret](){
243
243
  // really on worker
244
244
 
245
- // try to re-use already wrapped
245
+ // try to reuse already wrapped
246
246
  ret = external_internal.lock();
247
247
  if(!ret) {
248
248
  // nope, need to build a fresh one
@@ -133,19 +133,22 @@ struct FmtTree {
133
133
  case TypeCode::Bool:
134
134
  strm<<(fld.as<bool>() ? "true" : "false");
135
135
  return;
136
- #define CASE(ENUM, TYPE) \
137
- case TypeCode::ENUM : strm<<fld.as<TYPE>(); return
138
- CASE(Int8, int8_t);
139
- CASE(Int16, int16_t);
140
- CASE(Int32, int32_t);
141
- CASE(Int64, int64_t);
142
- CASE(UInt8, uint8_t);
143
- CASE(UInt16, uint16_t);
144
- CASE(UInt32, uint32_t);
145
- CASE(UInt64, uint64_t);
146
- CASE(Float32, float);
147
- CASE(Float64, double);
148
- #undef CASE
136
+ case TypeCode::Int8:
137
+ case TypeCode::Int16:
138
+ case TypeCode::Int32:
139
+ case TypeCode::Int64:
140
+ strm<<fld.as<int64_t>();
141
+ return;
142
+ case TypeCode::UInt8:
143
+ case TypeCode::UInt16:
144
+ case TypeCode::UInt32:
145
+ case TypeCode::UInt64:
146
+ strm<<fld.as<uint64_t>();
147
+ return;
148
+ case TypeCode::Float32:
149
+ case TypeCode::Float64:
150
+ strm<<fld.as<double>();
151
+ return;
149
152
  case TypeCode::String:
150
153
  strm<<"\""<<escape(fld.as<std::string>())<<"\"";
151
154
  return;
@@ -408,18 +408,40 @@ ServIface::ServIface(const SockAddr &addr, server::Server::Pvt *server, bool fal
408
408
  server->acceptor_loop.assertInLoop();
409
409
  auto orig_port = bind_addr.port();
410
410
 
411
- sock = evsocket(bind_addr.family(), SOCK_STREAM, 0);
412
-
413
- if(evutil_make_listen_socket_reuseable(sock.sock))
414
- log_warn_printf(connsetup, "Unable to make socket reusable%s", "\n");
415
-
416
411
  // try to bind to requested port, then fallback to a random port
417
412
  while(true) {
413
+
414
+ sock = evsocket(bind_addr.family(), SOCK_STREAM, 0);
415
+
416
+ if(evutil_make_listen_socket_reuseable(sock.sock))
417
+ log_warn_printf(connsetup, "Unable to make socket reusable%s", "\n");
418
+
418
419
  try {
419
420
  sock.bind(bind_addr);
421
+ // semantics of SO_REUSEADDR on *nix allow multiple bind() to success.
422
+ // however, only one listen() will succeed
423
+
424
+ // added in libevent 2.1.1
425
+ #ifndef LEV_OPT_DISABLED
426
+ # define LEV_OPT_DISABLED 0
427
+ #endif
428
+
429
+ const int backlog = 4;
430
+ auto list(evconnlistener_new(server->acceptor_loop.base, onConnS, this, LEV_OPT_DISABLED|LEV_OPT_CLOSE_ON_EXEC, backlog, sock.sock));
431
+ if(!list) {
432
+ int err = evutil_socket_geterror(sock);
433
+ throw std::system_error(err, std::system_category());
434
+ }
435
+ listener = evlisten(__FILE__, __LINE__, list);
436
+
437
+ if(!LEV_OPT_DISABLED)
438
+ evconnlistener_disable(listener.get());
439
+
420
440
  } catch(std::system_error& e) {
421
- if(fallback && e.code().value()==SOCK_EADDRINUSE) {
422
- log_debug_printf(connsetup, "Address %s in use\n", bind_addr.tostring().c_str());
441
+ if(fallback && (e.code().value()==SOCK_EADDRINUSE || e.code().value()==SOCK_EACCES)) {
442
+ log_debug_printf(connsetup, "Address %s in use or not permitted: %s\n",
443
+ bind_addr.tostring().c_str(),
444
+ e.what());
423
445
  bind_addr.setPort(0);
424
446
  fallback = false;
425
447
  continue;
@@ -438,18 +460,6 @@ ServIface::ServIface(const SockAddr &addr, server::Server::Pvt *server, bool fal
438
460
  if(orig_port && bind_addr.port() != orig_port) {
439
461
  log_warn_printf(connsetup, "Server unable to bind port %u, falling back to %s\n", orig_port, name.c_str());
440
462
  }
441
-
442
- // added in libevent 2.1.1
443
- #ifndef LEV_OPT_DISABLED
444
- # define LEV_OPT_DISABLED 0
445
- #endif
446
-
447
- const int backlog = 4;
448
- listener = evlisten(__FILE__, __LINE__,
449
- evconnlistener_new(server->acceptor_loop.base, onConnS, this, LEV_OPT_DISABLED|LEV_OPT_CLOSE_ON_EXEC, backlog, sock.sock));
450
-
451
- if(!LEV_OPT_DISABLED)
452
- evconnlistener_disable(listener.get());
453
463
  }
454
464
 
455
465
  void ServIface::onConnS(struct evconnlistener *listener, evutil_socket_t sock, struct sockaddr *peer, int socklen, void *raw)
@@ -1,2 +0,0 @@
1
- [build-system]
2
- requires = ["setuptools", "wheel", "setuptools_dso>=2.7a1", "setuptools_dso>=2.11a2; python_version >= '3.12'", "epicscorelibs>=7.0.7.99.1.1a2"]
@@ -1,2 +0,0 @@
1
- setuptools_dso>=2.7a1
2
- epicscorelibs<7.0.7.99.2,>=7.0.7.99.1.1a2
File without changes
File without changes
File without changes
File without changes