| | |
| | | return rv; |
| | | } |
| | | |
| | | while(true) { |
| | | while(tryn > 0) { |
| | | tryn--; |
| | | recvbufIter = sockt->recvbuf.find(uuid); |
| | | if(recvbufIter != sockt->recvbuf.end()) { |
| | |
| | | logger->debug("get from recvbuf: %s", uuid.c_str()); |
| | | recvpak = recvbufIter->second; |
| | | sockt->recvbuf.erase(recvbufIter); |
| | | break; |
| | | goto LABLE_SUC; |
| | | } |
| | | |
| | | rv = shm_recvpakfrom(sockt, &recvpak, timeout, flags); |
| | | |
| | | if (rv != 0) { |
| | | |
| | | if(rv == ETIMEDOUT) |
| | | if(rv == ETIMEDOUT) { |
| | | return EBUS_TIMEOUT; |
| | | } |
| | | |
| | | logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); |
| | | return rv; |
| | | } |
| | | |
| | | logger->debug("send uuid:%s, recv uuid: %s", uuid.c_str(), recvpak.uuid); |
| | | if (strncmp(uuid.c_str(), recvpak.uuid, sizeof recvpak.uuid) == 0) { |
| | | if(strlen(recvpak.uuid) == 0) { |
| | | continue; |
| | | } else if (strncmp(uuid.c_str(), recvpak.uuid, sizeof recvpak.uuid) == 0) { |
| | | // 发送与接受的UUID匹配成功 |
| | | break; |
| | | goto LABLE_SUC; |
| | | } else { |
| | | // 答非所问,放到缓存里 |
| | | sockt->recvbuf.insert({recvpak.uuid, recvpak}); |
| | | continue; |
| | | } |
| | | |
| | | if(tryn == 0) { |
| | | // 尝试了tryn次都没有成功 |
| | | return EBUS_RECVFROM_WRONG_END; |
| | | } |
| | | |
| | | } |
| | | |
| | | LABLE_FAIL: |
| | | return EBUS_RECVFROM_WRONG_END; |
| | | // return rv; |
| | | |
| | | LABLE_SUC: |
| | | if(recv_buf != NULL) { |
| | |
| | | |
| | | return 0; |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | void *ser; |
| | | void *serverSockt; |
| | | |
| | | static void _recvandsend_callback_(void *recvbuf, int recvsize, int key, void **sendbuf_ptr, int *sendsize_ptr, void * user_data) { |
| | | char sendbuf[512]; |
| | | printf( "server: RECEIVED REQUEST FROM %d : %s\n", key, (char *)recvbuf); |
| | | sprintf(sendbuf, "%d RECEIVED %s", net_mod_socket_get_key(ser), (char *)recvbuf); |
| | | sprintf(sendbuf, "%d RECEIVED %s", net_mod_socket_get_key(serverSockt), (char *)recvbuf); |
| | | // buf 和 size是返回值 |
| | | *sendbuf_ptr = sendbuf; |
| | | *sendsize_ptr = strlen(sendbuf) + 1; |
| | |
| | | |
| | | void start_reply(int mkey) { |
| | | printf("start reply\n"); |
| | | ser = net_mod_socket_open(); |
| | | net_mod_socket_bind(ser, mkey); |
| | | serverSockt = net_mod_socket_open(); |
| | | net_mod_socket_bind(serverSockt, mkey); |
| | | |
| | | int rv; |
| | | while(true) { |
| | | rv = net_mod_socket_recvandsend_timeout(ser, _recvandsend_callback_ , 0, 2000000, NULL ); |
| | | rv = net_mod_socket_recvandsend_timeout(serverSockt, _recvandsend_callback_ , 0, 2000000, NULL ); |
| | | } |
| | | // while ( (rv = net_mod_socket_recvfrom(ser, &recvbuf, &size, &key) ) == 0) { |
| | | // // printf( "server: RECEIVED REQUEST FROM %d NAME %s\n", key, recvbuf); |