开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
external_deqp
/
executor
/
xeLocalTcpIpLink.cpp
external_deqp
/
executor
/
xeLocalTcpIpLink.cpp
xeLocalTcpIpLink.cpp 4.15 KB
一键复制 编辑 原始数据 按行查看 历史
斗大的熊猫 提交于 2015年03月11日 16:37 +08:00 . depq
/*-------------------------------------------------------------------------
* drawElements Quality Program Test Executor
* ------------------------------------------
*
* Copyright 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*//*!
* \file
* \brief Tcp/Ip link that manages execserver process.
*//*--------------------------------------------------------------------*/
#include "xeLocalTcpIpLink.hpp"
#include "deClock.h"
#include "deThread.h"
#include <sstream>
enum
{
SERVER_START_TIMEOUT = 1000,
SERVER_START_IDLE_SLEEP = 50
};
namespace xe
{
LocalTcpIpLink::LocalTcpIpLink (void)
: m_process(DE_NULL)
{
}
LocalTcpIpLink::~LocalTcpIpLink (void)
{
stop();
}
void LocalTcpIpLink::start (const char* execServerPath, const char* workDir, int port)
{
XE_CHECK(!m_process);
std::ostringstream cmdLine;
cmdLine << execServerPath << " --single --port=" << port;
m_process = deProcess_create();
XE_CHECK(m_process);
if (deProcess_start(m_process, cmdLine.str().c_str(), workDir) != DE_TRUE)
{
std::string err = deProcess_getLastError(m_process);
deProcess_destroy(m_process);
m_process = DE_NULL;
XE_FAIL((std::string("Failed to start server: ") + err).c_str());
}
try
{
de::SocketAddress address;
address.setFamily (DE_SOCKETFAMILY_INET4);
address.setProtocol (DE_SOCKETPROTOCOL_TCP);
address.setHost ("127.0.0.1");
address.setPort (port);
// Wait until server has started - \todo [2012年07月19日 pyry] This could be improved by having server to signal when it is ready.
deUint64 waitStart = deGetMicroseconds();
for (;;)
{
if (!deProcess_isRunning(m_process))
XE_FAIL("ExecServer died");
try
{
m_link.connect(address);
break;
}
catch (const de::SocketError&)
{
if (deGetMicroseconds()-waitStart > SERVER_START_TIMEOUT*1000)
XE_FAIL("Server start timeout");
deSleep(SERVER_START_IDLE_SLEEP);
}
}
// Close stdout/stderr or otherwise process will hang once OS pipe buffers are full.
// \todo [2012年07月19日 pyry] Read and store stdout/stderr from execserver.
XE_CHECK(deProcess_closeStdOut(m_process));
XE_CHECK(deProcess_closeStdErr(m_process));
}
catch (const std::exception&)
{
stop();
throw;
}
}
void LocalTcpIpLink::stop (void)
{
if (m_process)
{
try
{
m_link.disconnect();
}
catch (...)
{
// Silently ignore since this is called in destructor.
}
// \note --single flag is used so execserver should kill itself once one connection is handled.
// This is here to make sure it dies even in case of hang.
deProcess_terminate (m_process);
deProcess_waitForFinish (m_process);
deProcess_destroy (m_process);
m_process = DE_NULL;
}
}
void LocalTcpIpLink::reset (void)
{
m_link.reset();
}
CommLinkState LocalTcpIpLink::getState (void) const
{
if (!m_process)
return COMMLINKSTATE_ERROR;
else
return m_link.getState();
}
CommLinkState LocalTcpIpLink::getState (std::string& error) const
{
if (!m_process)
{
error = "Not started";
return COMMLINKSTATE_ERROR;
}
else
return m_link.getState();
}
void LocalTcpIpLink::setCallbacks (StateChangedFunc stateChangedCallback, LogDataFunc testLogDataCallback, LogDataFunc infoLogDataCallback, void* userPtr)
{
m_link.setCallbacks(stateChangedCallback, testLogDataCallback, infoLogDataCallback, userPtr);
}
void LocalTcpIpLink::startTestProcess (const char* name, const char* params, const char* workingDir, const char* caseList)
{
if (m_process)
m_link.startTestProcess(name, params, workingDir, caseList);
else
XE_FAIL("Not started");
}
void LocalTcpIpLink::stopTestProcess (void)
{
if (m_process)
m_link.stopTestProcess();
else
XE_FAIL("Not started");
}
} // xe
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

android external deqp
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/androidsourcecode/external_deqp.git
git@gitee.com:androidsourcecode/external_deqp.git
androidsourcecode
external_deqp
external_deqp
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /