src/bus_error.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/bus_error.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/queue/lock_free_queue.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/queue/shm_queue.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/socket/net_mod_server_socket.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/socket/net_mod_socket.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/socket/shm_socket.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/bus_error.cpp
@@ -13,9 +13,10 @@ static char *_bus_errlist[_bus_nerr] = { "\0", "timeout", "Timeout", "The other end is not inline", "Key already in use" "Key already in use", "Network fault" }; @@ -43,7 +44,7 @@ { int s, eindex; char *buf; eindex = err - 10000; eindex = err - EBUS_BASE; /* Make first caller allocate key for thread-specific data */ s = pthread_once(&once, createKey); src/bus_error.h
@@ -7,7 +7,8 @@ #define EBUS_BASE 10000 #define EBUS_TIMEOUT 10001 #define EBUS_CLOSED 10002 #define ESHM_BUS_KEY_INUSED 10003 #define EBUS_KEY_INUSED 10003 #define EBUS_NET 10004 extern int bus_errno; src/queue/lock_free_queue.h
@@ -1,3 +1,6 @@ /** * encapsulate array_lock_free_queue, add semphore. populate in kernal space. */ #ifndef __LOCK_FREE_QUEUE_H__ #define __LOCK_FREE_QUEUE_H__ src/queue/shm_queue.h
@@ -1,3 +1,7 @@ /** * encapsulate lock_free_queue, populate in userspace */ #ifndef __SHM_QUEUE_H__ #define __SHM_QUEUE_H__ @@ -7,8 +11,7 @@ #include "sem_util.h" #include "shm_allocator.h" #include "usg_common.h" // default Queue size // #define LOCK_FREE_Q_DEFAULT_SIZE 16 template <typename ELEM_T> class SHMQueue { src/socket/net_mod_server_socket.cpp
@@ -181,7 +181,7 @@ } if( ret != 0) { // 没有对应的key // 转发失败 response_head.code = ret; response_head.content_length = 0; if( rio_writen(connfd, NetModSocket::encode_response_head(response_head), NET_MODE_RESPONSE_HEAD_LENGTH) != NET_MODE_RESPONSE_HEAD_LENGTH ) src/socket/net_mod_socket.cpp
@@ -240,12 +240,12 @@ mpool->conns[i].fd = -1; } else if(n == -1) { else if(n == EBUS_NET) { // 网络错误 mpool->closeConn( connfd); // mpool->conns[i].fd = -1; } else { // 对方key是关闭的 // 代理服务没有转发成功 mpool->conns[i].fd = -1; } @@ -263,7 +263,6 @@ // printf("poll POLLERR %d\n", connfd); mpool->nready--; mpool->closeConn( connfd); // mpool->conns[i].fd = -1; } } } @@ -274,7 +273,6 @@ if ( (connfd = mpool->conns[i].fd) > 0 ) { // 关闭并清除写入或读取失败的连接 mpool->closeConn( connfd); // mpool->conns[i].fd = -1; } } @@ -411,11 +409,11 @@ mpool->conns[i].fd = -1; n_pub_suc++; } else if(ret == -1) { else if(ret == EBUS_NET) { // 网络连接错误 mpool->closeConn( connfd); } else { // 对方的key是关闭的 // 代理服务没有转发成功 mpool->conns[i].fd = -1; } n_resp++; @@ -693,7 +691,7 @@ } /** * @return 0 成功, 1 对方没有对应的key, -1 网络错误 * @return 0 成功, EBUS_NET 网络错误, 其他值 代理服务没有转发成功。 * */ int NetModSocket::read_response(int connfd, net_mod_recv_msg_t *recv_msg) { @@ -712,7 +710,7 @@ // printf(">>>> read_response %s\n", response_head.host); if(response_head.code != 0) { // 代理服务没能成功发送给对应的key return 1; return response_head.code; } recv_buf = malloc(response_head.content_length); @@ -722,8 +720,8 @@ } if ( (recv_size = rio_readn(connfd, recv_buf, response_head.content_length) ) != response_head.content_length) { LoggerFactory::getLogger()->error(errno, "NetModSocket::read_response rio_readnb recv_buf"); return -1; //网络错误 return EBUS_NET; } strcpy( recv_msg->host, response_head.host); src/socket/shm_socket.cpp
@@ -30,8 +30,8 @@ static inline int _shm_socket_check_key(shm_socket_t *socket) { void *tmp_ptr = mm_get_by_key(socket->key); if (tmp_ptr!= NULL && tmp_ptr != (void *)1 && !socket->force_bind ) { bus_errno = ESHM_BUS_KEY_INUSED; logger->error("%s. key = %d ", bus_strerror(ESHM_BUS_KEY_INUSED), socket->key); bus_errno = EBUS_KEY_INUSED; logger->error("%s. key = %d ", bus_strerror(EBUS_KEY_INUSED), socket->key); return 0; } return 1; @@ -133,8 +133,8 @@ } else { if(!_shm_socket_check_key(socket)) { bus_errno = ESHM_BUS_KEY_INUSED; return ESHM_BUS_KEY_INUSED; bus_errno = EBUS_KEY_INUSED; return EBUS_KEY_INUSED; } } @@ -224,8 +224,8 @@ socket->key = hashtable_alloc_key(hashtable); } else { if(!_shm_socket_check_key(socket)) { bus_errno = ESHM_BUS_KEY_INUSED; return ESHM_BUS_KEY_INUSED; bus_errno = EBUS_KEY_INUSED; return EBUS_KEY_INUSED; } } @@ -338,8 +338,8 @@ } else { if(!_shm_socket_check_key(socket)) { bus_errno = ESHM_BUS_KEY_INUSED; return ESHM_BUS_KEY_INUSED; bus_errno = EBUS_KEY_INUSED; return EBUS_KEY_INUSED; } } @@ -350,10 +350,13 @@ if ((s = pthread_mutex_unlock(&(socket->mutex))) != 0) err_exit(s, "shm_sendto : pthread_mutex_unlock"); if (key == socket->key) { logger->error( "can not send to your self!"); return -1; } // There is some case where a socket need to send to himeself, for example when bus server need to stop, he need to send himself // a top message. // if (key == socket->key) { // logger->error( "can not send to your self!"); // return -1; // } SHMQueue<shm_msg_t> *remoteQueue; if ((remoteQueue = _attach_remote_queue(key)) == NULL) { @@ -419,8 +422,8 @@ } else { if(!_shm_socket_check_key(socket)) { bus_errno = ESHM_BUS_KEY_INUSED; return ESHM_BUS_KEY_INUSED; bus_errno = EBUS_KEY_INUSED; return EBUS_KEY_INUSED; } }