| | |
| | | #include "socket_def.h" |
| | | #include "hashtable.h" |
| | | #include "logger_factory.h" |
| | | #include "net_mod_socket_wrapper.h" |
| | | #include <map> |
| | | #include <cassert> |
| | | #include "bus_error.h" |
| | | #include "sole.h" |
| | | #include "bh_api.h" |
| | | #include "shm_mm.h" |
| | | #include "key_def.h" |
| | | |
| | |
| | | |
| | | |
| | | static int _shm_socket_close_(shm_socket_t *sockt) { |
| | | |
| | | int rv, i; |
| | | hashtable_t *hashtable = mm_get_hashtable(); |
| | | |
| | | // if(sockt->key != 0) { |
| | | // auto it = shmQueueStMap->find(sockt->key); |
| | |
| | | // } |
| | | // } |
| | | |
| | | if(sockt->queue != NULL) { |
| | | sockt->queue->close(); |
| | | for( i = 0; i < sockt->queue->size(); i++) { |
| | | mm_free((*(sockt->queue))[i].buf); |
| | | logger->info("======= %d free queue element buf\n", sockt->key); |
| | | } |
| | | sleep(1); |
| | | |
| | | hashtable_remove(hashtable, sockt->key); |
| | | // sockt->queue = NULL; |
| | | } |
| | | |
| | | pthread_mutex_destroy(&(sockt->mutex) ); |
| | | free(sockt); |
| | | return 0; |
| | |
| | | const int send_size, const int key, void **recv_buf, |
| | | int *recv_size, const struct timespec *timeout, int flags) { |
| | | |
| | | |
| | | int data; |
| | | int timeout_ms; |
| | | char data_buf[MAX_STR_LEN] = { 0x00 }; |
| | | int rv = 0, tryn = 16; |
| | | shm_packet_t sendpak; |
| | | shm_packet_t recvpak; |
| | | std::map<int, shm_packet_t>::iterator recvbufIter; |
| | | shm_socket_t *tmp_socket = NULL; |
| | | |
| | | hashtable_t *hashtable = mm_get_hashtable(); |
| | | |
| | | rv = pthread_once(&_once_, _create_threadlocal_socket_key_); |
| | | if (rv != 0) { |
| | | logger->error(rv, "shm_sendandrecv pthread_once"); |
| | |
| | | if (tmp_socket == NULL) |
| | | { |
| | | tmp_socket = shm_socket_open(SHM_SOCKET_DGRAM); |
| | | |
| | | |
| | | tmp_socket->key = hashtable_alloc_key(hashtable); |
| | | data = inter_key_get(); |
| | | timeout_ms = timeout->tv_sec * 1000 + 3000; |
| | | sprintf(data_buf, "%d, %d", data, tmp_socket->key); |
| | | if (socket_data_get() != NULL) { |
| | | net_mod_socket_reg(socket_data_get(), data_buf, strlen(data_buf), NULL, 0, timeout_ms, PROC_REG_BUF); |
| | | } |
| | | |
| | | rv = pthread_setspecific(_localthread_socket_key_, tmp_socket); |
| | | if ( rv != 0) { |
| | | logger->error(rv, "shm_sendandrecv : pthread_setspecific"); |
| | |
| | | if (sockt->key == 0) { |
| | | sockt->key = hashtable_alloc_key(hashtable); |
| | | } |
| | | |
| | | sockt->queue = shm_socket_bind_queue( sockt->key, sockt->force_bind); |
| | | if(sockt->queue == NULL ) { |
| | | logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sockt->key); |
| | |
| | | count += strlen(ptr->int_info) + 1; |
| | | memcpy(dst + count, ptr->svr_info, strlen(ptr->svr_info) + 1); |
| | | count += strlen(ptr->svr_info) + 1; |
| | | |
| | | |
| | | *counter = count; |
| | | } |
| | | |