/** *\brief 发送网络请求,并检测请求结果是否成功失败。 *\param fs 定义了套接子得相关属性。 *\param msg 定义了发送的命令缓存。 *\param mlen 定义了发送的命令长度。 *\param recv_buf 定义了获得返回的信息缓存。 *\param recv_len 定义了返回数据的长度信息。 *\param success_reply 定义了获得返回失败的信息缓存。 *\param rlen 定义了返回失败数据的长度信息。 *\param timeout_usec 定义了命令请求超时得时间。 *\retval E_OK 表示成功。 */ e_int32 fsocket_request_failed(fsocket_t *fs, e_uint8 *msg, e_uint32 mlen, e_uint8 *recv_buf, e_uint32 recv_len, const e_uint8 *failed_reply, const e_uint32 rlen, e_uint32 timeout_usec) { e_int32 ret; ret = fsocket_request(fs, msg, mlen, recv_buf, recv_len, timeout_usec); e_assert(ret>0, ret); if (strncmp(recv_buf, failed_reply, rlen)) { return E_OK; } return E_ERROR; }
/** *\brief 发送网络命令。 *\param fs 定义了套接子得相关属性。 *\param msg 定义了发送的命令缓存。 *\param mlen 定义了发送的命令长度。const *\param success_reply 定义了获得返回的信息缓存。 *\param rlen 定义了返回数据的长度信息。 *\param timeout_usec 定义了命令请求超时得时间。 *\retval E_OK 表示成功。 */ e_int32 fsocket_command(fsocket_t *fs, e_uint8 *msg, e_uint32 mlen, e_uint8 *success_reply, e_uint32 rlen, e_uint32 timeout_usec) { e_int32 ret; e_int8 buf[MSG_MAX_LEN] = { 0 }; ret = fsocket_request(fs, msg, mlen, buf, MSG_MAX_LEN, timeout_usec); e_assert(ret>0, ret); if (!strncmp(buf, success_reply, rlen)) { return E_OK; } else { DMSG((STDOUT, "FAKE SOCKET [%s:%u:%u] error replay:%5s\n", fs->name, (unsigned int) fs->id, (unsigned int) fs->rq_id, buf)); } return E_ERROR; }
void request_thread(void *data) { int i = 10; e_int32 ret; e_uint8 buf[128]; e_uint8 msg[128]; fsocket_t* fd = (fsocket_t*) data; sprintf(msg, "\tREQUEST MSG FROM %hd\r\n", fd->id); while (i--) { DMSG((STDOUT,"[%d] client send %s",i,msg)); ret = fsocket_request(fd, msg, strlen(msg), buf, 128, 1000000000); //1 s if (ret > 0) { DMSG((STDOUT,"[%s.%d] client request recv [ %s ]\r\n", fd->name,fd->id,buf)); } else { DMSG((STDOUT,"[%s.%d] client request failed\r\n",fd->name,fd->id)); } Delay(1000); } fsocket_close(fd); count++; }