![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/share/emscripten/tests/sockets/ |
Upload File : |
#ifndef __TEST_SOCKETS_MSG_H__ #define __TEST_SOCKETS_MSG_H__ typedef struct { char *buffer; int length; } msg_t; int do_msg_read(int sockfd, msg_t *msg, int offset, int length, struct sockaddr *addr, socklen_t *addrlen) { int res; if (!msg->length) { // read the message length res = recvfrom(sockfd, &msg->length, sizeof(int), 0, (struct sockaddr *)addr, addrlen); if (res == -1) { assert(errno == EAGAIN); return res; } assert(res != 0); printf("do_msg_read: allocating %d bytes for message\n", msg->length); msg->buffer = malloc(msg->length); } // read the actual message int max = msg->length - offset; if (length && max > length) { max = length; } res = recvfrom(sockfd, msg->buffer + offset, max, 0, (struct sockaddr *)addr, addrlen); if (res == -1) { assert(errno == EAGAIN); return res; } printf("do_msg_read: read %d bytes\n", res); return res; } int do_msg_write(int sockfd, msg_t *msg, int offset, int length, struct sockaddr *addr, socklen_t addrlen) { int res; // send the message length first if (!offset) { if (addr) { res = sendto(sockfd, &msg->length, sizeof(int), 0, addr, addrlen); } else { res = send(sockfd, &msg->length, sizeof(int), 0); } if (res == -1) { assert(errno == EAGAIN); return res; } printf("do_msg_write: sending message header for %d bytes\n", msg->length); assert(res == sizeof(int)); } // then the actual message int max = msg->length - offset; if (length && max > length) { max = length; } if (addr) { res = sendto(sockfd, msg->buffer + offset, max, 0, addr, addrlen); } else { res = send(sockfd, msg->buffer + offset, max, 0); } if (res == -1) { assert(errno == EAGAIN); return res; } printf("do_msg_write: wrote %d bytes %d\n", res, msg->length); return res; } #endif