34 #define MHD_SOCKETS_H 1 39 #if ! defined(MHD_POSIX_SOCKETS) && ! defined(MHD_WINSOCK_SOCKETS) 40 # if ! defined(_WIN32) || defined(__CYGWIN__) 41 # define MHD_POSIX_SOCKETS 1 43 # define MHD_WINSOCK_SOCKETS 1 54 #if defined(MHD_POSIX_SOCKETS) 55 # ifdef HAVE_SYS_TYPES_H 56 # include <sys/types.h> 58 # ifdef HAVE_SYS_SOCKET_H 59 # include <sys/socket.h> 61 # if defined(__VXWORKS__) || defined(__vxworks) || defined(OS_VXWORKS) 62 # ifdef HAVE_SOCKLIB_H 65 # ifdef HAVE_INETLIB_H 70 # ifdef HAVE_NETINET_IN_H 71 # include <netinet/in.h> 73 # ifdef HAVE_ARPA_INET_H 74 # include <arpa/inet.h> 79 # ifdef HAVE_SYS_TIME_H 80 # include <sys/time.h> 88 # ifdef HAVE_SYS_SELECT_H 89 # include <sys/select.h> 92 # include <sys/epoll.h> 94 # ifdef HAVE_NETINET_TCP_H 96 # include <netinet/tcp.h> 101 #elif defined(MHD_WINSOCK_SOCKETS) 102 # ifndef WIN32_LEAN_AND_MEAN 103 # define WIN32_LEAN_AND_MEAN 1 105 # include <winsock2.h> 106 # include <ws2tcpip.h> 109 #if defined(HAVE_POLL_H) && defined(HAVE_POLL) 114 #if defined(_MSC_FULL_VER) && ! defined (_SSIZE_T_DEFINED) 116 # define _SSIZE_T_DEFINED 117 typedef intptr_t ssize_t;
122 #ifdef _MHD_FD_SETSIZE_IS_DEFAULT 123 # define _MHD_SYS_DEFAULT_FD_SETSIZE FD_SETSIZE 126 # define _MHD_SYS_DEFAULT_FD_SETSIZE get_system_fdsetsize_value () 133 # define MHD_PANIC(msg) do { fprintf (stderr, \ 134 "Abnormal termination at %d line in file %s: %s\n", \ 135 (int) __LINE__, __FILE__, msg); abort (); \ 139 #ifndef MHD_SOCKET_DEFINED 143 # if defined(MHD_POSIX_SOCKETS) 145 # define MHD_INVALID_SOCKET (-1) 146 # elif defined(MHD_WINSOCK_SOCKETS) 148 # define MHD_INVALID_SOCKET (INVALID_SOCKET) 151 # define MHD_SOCKET_DEFINED 1 155 # define MAYBE_SOCK_CLOEXEC SOCK_CLOEXEC 157 # define MAYBE_SOCK_CLOEXEC 0 160 #ifdef HAVE_SOCK_NONBLOCK 161 # define MAYBE_SOCK_NONBLOCK SOCK_NONBLOCK 163 # define MAYBE_SOCK_NONBLOCK 0 167 # define MAYBE_MSG_NOSIGNAL MSG_NOSIGNAL 169 # define MAYBE_MSG_NOSIGNAL 0 172 #if ! defined(SHUT_WR) && defined(SD_SEND) 173 # define SHUT_WR SD_SEND 175 #if ! defined(SHUT_RD) && defined(SD_RECEIVE) 176 # define SHUT_RD SD_RECEIVE 178 #if ! defined(SHUT_RDWR) && defined(SD_BOTH) 179 # define SHUT_RDWR SD_BOTH 182 #if HAVE_ACCEPT4 + 0 != 0 && (defined(HAVE_SOCK_NONBLOCK) || \ 183 defined(SOCK_CLOEXEC)) 184 # define USE_ACCEPT4 1 187 #if defined(HAVE_EPOLL_CREATE1) && defined(EPOLL_CLOEXEC) 188 # define USE_EPOLL_CREATE1 1 195 #define MHD_TCP_FASTOPEN_QUEUE_SIZE_DEFAULT 10 202 #ifdef MHD_POSIX_SOCKETS 212 #if ! defined(MHD_WINSOCK_SOCKETS) 221 #if ! defined(MHD_WINSOCK_SOCKETS) 222 # define MHD_SCKT_SEND_MAX_SIZE_ SSIZE_MAX 224 # define MHD_SCKT_SEND_MAX_SIZE_ INT_MAX 237 #if ! defined(MHD_WINSOCK_SOCKETS) 238 # define MHD_socket_close_(fd) ((0 == close ((fd))) || (EBADF != errno)) 240 # define MHD_socket_close_(fd) (0 == closesocket ((fd))) 248 #define MHD_socket_close_chk_(fd) do { \ 249 if (! MHD_socket_close_ (fd)) \ 250 MHD_PANIC (_ ("Close socket failed.\n")); \ 261 #define MHD_send_(s,b,l) \ 262 ((ssize_t) send ((s),(const void*) (b),((MHD_SCKT_SEND_SIZE_) l), \ 273 #define MHD_recv_(s,b,l) \ 274 ((ssize_t) recv ((s),(void*) (b),((MHD_SCKT_SEND_SIZE_) l), 0)) 286 #if defined(MHD_POSIX_SOCKETS) 287 # define MHD_SCKT_FD_FITS_FDSET_SETSIZE_(fd,pset,setsize) ((fd) < \ 290 #elif defined(MHD_WINSOCK_SOCKETS) 291 # define MHD_SCKT_FD_FITS_FDSET_SETSIZE_(fd,pset,setsize) ( ((void*) (pset)== \ 293 (((fd_set*) (pset)) \ 309 #define MHD_SCKT_FD_FITS_FDSET_(fd,pset) MHD_SCKT_FD_FITS_FDSET_SETSIZE_ ((fd), \ 321 #if defined(MHD_POSIX_SOCKETS) 322 # define MHD_SCKT_ADD_FD_TO_FDSET_SETSIZE_(fd,pset,setsize) FD_SET ((fd), \ 324 #elif defined(MHD_WINSOCK_SOCKETS) 325 # define MHD_SCKT_ADD_FD_TO_FDSET_SETSIZE_(fd,pset,setsize) \ 328 fd_set*const _s_ = (fd_set*) (pset); \ 329 while ((_i_ < _s_->fd_count) && ((fd) != _s_->fd_array [_i_])) {++_i_;} \ 330 if ((_i_ == _s_->fd_count)) {_s_->fd_array [_s_->fd_count ++] = (fd);} \ 335 #if ! defined(MHD_WINSOCK_SOCKETS) 336 # define MHD_SYS_select_(n,r,w,e,t) select ((n),(r),(w),(e),(t)) 338 # define MHD_SYS_select_(n,r,w,e,t) \ 339 ( ( (((void*) (r) == (void*) 0) || ((fd_set*) (r))->fd_count == 0) && \ 340 (((void*) (w) == (void*) 0) || ((fd_set*) (w))->fd_count == 0) && \ 341 (((void*) (e) == (void*) 0) || ((fd_set*) (e))->fd_count == 0) ) ? \ 342 ( ((void*) (t) == (void*) 0) ? 0 : \ 343 (Sleep (((struct timeval*) (t))->tv_sec * 1000 \ 344 + ((struct timeval*) (t))->tv_usec / 1000), 0) ) : \ 345 (select ((int) 0,(r),(w),(e),(t))) ) 348 #if defined(HAVE_POLL) 350 # if ! defined(MHD_WINSOCK_SOCKETS) 351 # define MHD_sys_poll_ poll 353 # define MHD_sys_poll_ WSAPoll 357 # define MHD_POLLPRI_OR_ZERO POLLPRI 359 # define MHD_POLLPRI_OR_ZERO 0 362 # define MHD_POLLRDBAND_OR_ZERO POLLRDBAND 364 # define MHD_POLLRDBAND_OR_ZERO 0 367 # define MHD_POLLNVAL_OR_ZERO POLLNVAL 369 # define MHD_POLLNVAL_OR_ZERO 0 374 # if defined(_WIN32) && ! defined(__CYGWIN__) 375 # define MHD_POLL_EVENTS_ERR_DISC POLLRDBAND 376 # elif defined(__linux__) 377 # define MHD_POLL_EVENTS_ERR_DISC POLLPRI 379 # define MHD_POLL_EVENTS_ERR_DISC (MHD_POLLPRI_OR_ZERO \ 380 | MHD_POLLRDBAND_OR_ZERO) 384 # define MHD_POLL_REVENTS_ERR_DISC \ 385 (MHD_POLLPRI_OR_ZERO | MHD_POLLRDBAND_OR_ZERO | MHD_POLLNVAL_OR_ZERO \ 389 # define MHD_POLL_REVENTS_ERRROR \ 390 (MHD_POLLPRI_OR_ZERO | MHD_POLLRDBAND_OR_ZERO | MHD_POLLNVAL_OR_ZERO \ 394 #define MHD_SCKT_MISSING_ERR_CODE_ 31450 396 #if defined(MHD_POSIX_SOCKETS) 398 # define MHD_SCKT_EAGAIN_ EAGAIN 399 # elif defined(EWOULDBLOCK) 400 # define MHD_SCKT_EAGAIN_ EWOULDBLOCK 402 # define MHD_SCKT_EAGAIN_ MHD_SCKT_MISSING_ERR_CODE_ 404 # if defined(EWOULDBLOCK) 405 # define MHD_SCKT_EWOULDBLOCK_ EWOULDBLOCK 406 # elif defined(EAGAIN) 407 # define MHD_SCKT_EWOULDBLOCK_ EAGAIN 409 # define MHD_SCKT_EWOULDBLOCK_ MHD_SCKT_MISSING_ERR_CODE_ 412 # define MHD_SCKT_EINTR_ EINTR 414 # define MHD_SCKT_EINTR_ MHD_SCKT_MISSING_ERR_CODE_ 417 # define MHD_SCKT_ECONNRESET_ ECONNRESET 419 # define MHD_SCKT_ECONNRESET_ MHD_SCKT_MISSING_ERR_CODE_ 422 # define MHD_SCKT_ECONNABORTED_ ECONNABORTED 424 # define MHD_SCKT_ECONNABORTED_ MHD_SCKT_MISSING_ERR_CODE_ 427 # define MHD_SCKT_ENOTCONN_ ENOTCONN 429 # define MHD_SCKT_ENOTCONN_ MHD_SCKT_MISSING_ERR_CODE_ 432 # define MHD_SCKT_EMFILE_ EMFILE 434 # define MHD_SCKT_EMFILE_ MHD_SCKT_MISSING_ERR_CODE_ 437 # define MHD_SCKT_ENFILE_ ENFILE 439 # define MHD_SCKT_ENFILE_ MHD_SCKT_MISSING_ERR_CODE_ 442 # define MHD_SCKT_ENOMEM_ ENOMEM 444 # define MHD_SCKT_ENOMEM_ MHD_SCKT_MISSING_ERR_CODE_ 447 # define MHD_SCKT_ENOBUFS_ ENOBUFS 449 # define MHD_SCKT_ENOBUFS_ MHD_SCKT_MISSING_ERR_CODE_ 452 # define MHD_SCKT_EBADF_ EBADF 454 # define MHD_SCKT_EBADF_ MHD_SCKT_MISSING_ERR_CODE_ 457 # define MHD_SCKT_ENOTSOCK_ ENOTSOCK 459 # define MHD_SCKT_ENOTSOCK_ MHD_SCKT_MISSING_ERR_CODE_ 462 # define MHD_SCKT_EINVAL_ EINVAL 464 # define MHD_SCKT_EINVAL_ MHD_SCKT_MISSING_ERR_CODE_ 467 # define MHD_SCKT_EFAUL_ EFAULT 469 # define MHD_SCKT_EFAUL_ MHD_SCKT_MISSING_ERR_CODE_ 472 # define MHD_SCKT_ENOSYS_ ENOSYS 474 # define MHD_SCKT_ENOSYS_ MHD_SCKT_MISSING_ERR_CODE_ 477 # define MHD_SCKT_ENOTSUP_ ENOTSUP 479 # define MHD_SCKT_ENOTSUP_ MHD_SCKT_MISSING_ERR_CODE_ 482 # define MHD_SCKT_EOPNOTSUPP_ EOPNOTSUPP 484 # define MHD_SCKT_EOPNOTSUPP_ MHD_SCKT_MISSING_ERR_CODE_ 487 # define MHD_SCKT_EACCESS_ EACCES 489 # define MHD_SCKT_EACCESS_ MHD_SCKT_MISSING_ERR_CODE_ 492 # define MHD_SCKT_ENETDOWN_ ENETDOWN 494 # define MHD_SCKT_ENETDOWN_ MHD_SCKT_MISSING_ERR_CODE_ 496 #elif defined(MHD_WINSOCK_SOCKETS) 497 # define MHD_SCKT_EAGAIN_ WSAEWOULDBLOCK 498 # define MHD_SCKT_EWOULDBLOCK_ WSAEWOULDBLOCK 499 # define MHD_SCKT_EINTR_ WSAEINTR 500 # define MHD_SCKT_ECONNRESET_ WSAECONNRESET 501 # define MHD_SCKT_ECONNABORTED_ WSAECONNABORTED 502 # define MHD_SCKT_ENOTCONN_ WSAENOTCONN 503 # define MHD_SCKT_EMFILE_ WSAEMFILE 504 # define MHD_SCKT_ENFILE_ MHD_SCKT_MISSING_ERR_CODE_ 505 # define MHD_SCKT_ENOMEM_ MHD_SCKT_MISSING_ERR_CODE_ 506 # define MHD_SCKT_ENOBUFS_ WSAENOBUFS 507 # define MHD_SCKT_EBADF_ WSAEBADF 508 # define MHD_SCKT_ENOTSOCK_ WSAENOTSOCK 509 # define MHD_SCKT_EINVAL_ WSAEINVAL 510 # define MHD_SCKT_EFAUL_ WSAEFAULT 511 # define MHD_SCKT_ENOSYS_ MHD_SCKT_MISSING_ERR_CODE_ 512 # define MHD_SCKT_ENOTSUP_ MHD_SCKT_MISSING_ERR_CODE_ 513 # define MHD_SCKT_EOPNOTSUPP_ WSAEOPNOTSUPP 514 # define MHD_SCKT_EACCESS_ WSAEACCES 515 # define MHD_SCKT_ENETDOWN_ WSAENETDOWN 522 #if defined(MHD_POSIX_SOCKETS) 523 # define MHD_socket_get_error_() (errno) 524 #elif defined(MHD_WINSOCK_SOCKETS) 525 # define MHD_socket_get_error_() WSAGetLastError () 528 #ifdef MHD_WINSOCK_SOCKETS 536 const char*MHD_W32_strerror_winsock_ (
int err);
541 #if defined(MHD_POSIX_SOCKETS) 542 # define MHD_socket_strerr_(err) strerror ((err)) 543 #elif defined(MHD_WINSOCK_SOCKETS) 544 # define MHD_socket_strerr_(err) MHD_W32_strerror_winsock_ ((err)) 549 #define MHD_socket_last_strerr_() MHD_socket_strerr_ (MHD_socket_get_error_ ()) 554 #if defined(MHD_POSIX_SOCKETS) 555 # define MHD_socket_fset_error_(err) (errno = (err)) 556 #elif defined(MHD_WINSOCK_SOCKETS) 557 # define MHD_socket_fset_error_(err) (WSASetLastError ((err))) 568 #define MHD_socket_try_set_error_(err) ( (MHD_SCKT_MISSING_ERR_CODE_ != (err)) ? \ 569 (MHD_socket_fset_error_ ((err)), ! 0) : \ 577 #if defined(MHD_POSIX_SOCKETS) 579 # define MHD_socket_set_error_(err) ( (MHD_SCKT_MISSING_ERR_CODE_ == (err)) ? \ 580 (errno = ENOSYS) : (errno = (err)) ) 581 # elif defined(EOPNOTSUPP) 582 # define MHD_socket_set_error_(err) ( (MHD_SCKT_MISSING_ERR_CODE_ == (err)) ? \ 583 (errno = EOPNOTSUPP) : (errno = \ 585 # elif defined (EFAULT) 586 # define MHD_socket_set_error_(err) ( (MHD_SCKT_MISSING_ERR_CODE_ == (err)) ? \ 587 (errno = EFAULT) : (errno = (err)) ) 588 # elif defined (EINVAL) 589 # define MHD_socket_set_error_(err) ( (MHD_SCKT_MISSING_ERR_CODE_ == (err)) ? \ 590 (errno = EINVAL) : (errno = (err)) ) 593 No suitable replacement for missing socket error code is found. Edit this file and add replacement code which is defined on system. 594 # define MHD_socket_set_error_(err) (errno = (err)) 596 #elif defined(MHD_WINSOCK_SOCKETS) 597 # define MHD_socket_set_error_(err) ( (MHD_SCKT_MISSING_ERR_CODE_ == (err)) ? \ 598 (WSASetLastError ((WSAEOPNOTSUPP))) : \ 599 (WSASetLastError ((err))) ) 611 #define MHD_SCKT_ERR_IS_(err,code) ( (MHD_SCKT_MISSING_ERR_CODE_ != (code)) && \ 623 #define MHD_SCKT_LAST_ERR_IS_(code) MHD_SCKT_ERR_IS_ (MHD_socket_get_error_ (), \ 634 #define MHD_SCKT_ERR_IS_EINTR_(err) MHD_SCKT_ERR_IS_ ((err),MHD_SCKT_EINTR_) 642 #if MHD_SCKT_EAGAIN_ == MHD_SCKT_EWOULDBLOCK_ 643 # define MHD_SCKT_ERR_IS_EAGAIN_(err) MHD_SCKT_ERR_IS_ ((err),MHD_SCKT_EAGAIN_) 645 # define MHD_SCKT_ERR_IS_EAGAIN_(err) (MHD_SCKT_ERR_IS_ ((err), \ 646 MHD_SCKT_EAGAIN_) || \ 647 MHD_SCKT_ERR_IS_ ((err), \ 648 MHD_SCKT_EWOULDBLOCK_) ) 656 #define MHD_SCKT_ERR_IS_LOW_RESOURCES_(err) (MHD_SCKT_ERR_IS_ ((err), \ 659 MHD_SCKT_ERR_IS_ ((err), \ 662 MHD_SCKT_ERR_IS_ ((err), \ 665 MHD_SCKT_ERR_IS_ ((err), \ 674 #if defined(MHD_POSIX_SOCKETS) 675 # define MHD_SCKT_ERR_IS_DISCNN_BEFORE_ACCEPT_(err) MHD_SCKT_ERR_IS_ ((err), \ 676 MHD_SCKT_ECONNABORTED_) 677 #elif defined(MHD_WINSOCK_SOCKETS) 678 # define MHD_SCKT_ERR_IS_DISCNN_BEFORE_ACCEPT_(err) MHD_SCKT_ERR_IS_ ((err), \ 679 MHD_SCKT_ECONNRESET_) 688 #define MHD_SCKT_ERR_IS_REMOTE_DISCNN_(err) (MHD_SCKT_ERR_IS_ ((err), \ 689 MHD_SCKT_ECONNRESET_) \ 691 MHD_SCKT_ERR_IS_ ((err), \ 692 MHD_SCKT_ECONNABORTED_)) 700 #if MHD_SCKT_MISSING_ERR_CODE_ != MHD_SCKT_ENOMEM_ 701 # define MHD_socket_set_error_to_ENOMEM() MHD_socket_set_error_ ( \ 703 #elif MHD_SCKT_MISSING_ERR_CODE_ != MHD_SCKT_ENOBUFS_ 704 # define MHD_socket_set_error_to_ENOMEM() MHD_socket_set_error_ ( \ 708 No suitable replacement for ENOMEM error codes is found. Edit this file and add replacement code which is defined on system. 709 # define MHD_socket_set_error_to_ENOMEM() MHD_socket_set_error_ ( \ 715 #if defined(AF_LOCAL) 716 # define MHD_SCKT_LOCAL AF_LOCAL 717 #elif defined(AF_UNIX) 718 # define MHD_SCKT_LOCAL AF_UNIX 721 #if defined(MHD_POSIX_SOCKETS) && defined(MHD_SCKT_LOCAL) 722 # define MHD_socket_pair_(fdarr) (! socketpair (MHD_SCKT_LOCAL, SOCK_STREAM, 0, \ 724 # if defined(HAVE_SOCK_NONBLOCK) 725 # define MHD_socket_pair_nblk_(fdarr) (! socketpair (MHD_SCKT_LOCAL, \ 727 | SOCK_NONBLOCK, 0, \ 730 #elif defined(MHD_WINSOCK_SOCKETS) 738 int MHD_W32_socket_pair_ (SOCKET sockets_pair[2],
int non_blk);
740 # define MHD_socket_pair_(fdarr) MHD_W32_socket_pair_ ((fdarr), 0) 741 # define MHD_socket_pair_nblk_(fdarr) MHD_W32_socket_pair_ ((fdarr), 1) 758 unsigned int fd_setsize);
782 #if defined(SOL_SOCKET) && defined(SO_NOSIGPIPE) 783 static const int _MHD_socket_int_one = 1;
790 # define MHD_socket_nosignal_(sock) \ 791 (! setsockopt ((sock),SOL_SOCKET,SO_NOSIGPIPE,&_MHD_socket_int_one, \ 792 sizeof(_MHD_socket_int_one))) int MHD_add_to_fd_set_(MHD_socket fd, fd_set *set, MHD_socket *max_fd, unsigned int fd_setsize)
additional automatic macros for MHD_config.h
int MHD_socket_nonblocking_(MHD_socket sock)
int MHD_socket_noninheritable_(MHD_socket sock)
size_t MHD_SCKT_SEND_SIZE_
MHD_socket MHD_socket_create_listen_(int pf)