| | |
| | | } |
| | | |
| | | int shm_close_socket(shm_socket_t *socket) { |
| | | |
| | | int ret; |
| | | switch (socket->socket_type) { |
| | | case SHM_SOCKET_STREAM: |
| | | return _shm_close_stream_socket(socket, true); |
| | | case SHM_SOCKET_DGRAM: |
| | | return _shm_close_dgram_socket(socket); |
| | | default: |
| | | return -1; |
| | | case SHM_SOCKET_STREAM: |
| | | ret = _shm_close_stream_socket(socket, true); |
| | | break; |
| | | case SHM_SOCKET_DGRAM: |
| | | ret = _shm_close_dgram_socket(socket); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return -1; |
| | | SemUtil::remove(socket->mutex); |
| | | free(socket); |
| | | return ret; |
| | | } |
| | | |
| | | int shm_socket_bind(shm_socket_t *socket, int port) { |
| | |
| | | return -1; |
| | | } |
| | | |
| | | int shm_sendandrecv_unsafe(shm_socket_t *socket, const void *send_buf, |
| | | const int send_size, const int send_port, void **recv_buf, |
| | | int *recv_size, struct timespec *timeout, int flags) { |
| | | if (socket->socket_type != SHM_SOCKET_DGRAM) { |
| | | err_exit(0, "Can't invoke shm_sendandrecv method in a %d type socket " |
| | | "which is not a SHM_SOCKET_DGRAM socket ", |
| | | socket->socket_type); |
| | | } |
| | | int recv_port; |
| | | int rv; |
| | | |
| | | |
| | | if ((rv = shm_sendto(socket, send_buf, send_size, send_port, timeout, flags)) == 0) { |
| | | rv = shm_recvfrom(socket, recv_buf, recv_size, &recv_port, timeout, flags); |
| | | return rv; |
| | | } else { |
| | | return rv; |
| | | } |
| | | return -1; |
| | | } |
| | | |
| | | // ============================================================================================================ |
| | | |
| | | /** |
| | |
| | | if (socket->dispatch_thread != 0) |
| | | pthread_cancel(socket->dispatch_thread); |
| | | |
| | | free(socket); |
| | | |
| | | return 0; |
| | | |
| | | } |
| | |
| | | delete socket->queue; |
| | | socket->queue = NULL; |
| | | } |
| | | free(socket); |
| | | |
| | | return 0; |
| | | } |
| | | |