问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux下有系统tcp连接超时时间么

发布网友 发布时间:2022-04-21 02:11

我来回答

2个回答

热心网友 时间:2022-05-04 03:46

可以作为TCP连接的典范:

bool CRemoteLink::Connect()
{
OnDisconnected();   // 如果已经连接,则断开

if(!m_bUseProxy)
{

m_iConnStatus = SS_CONNECTING;  // 正在连接状态
GNTRACE ("开始连接到远程服务器[%s][%ld]...\n", m_strip.c_str(), m_port);

// 建立套接字, 准备连接到服务器
m_socket = ::socket(AF_INET, SOCK_STREAM, 0);
if (socket < 0) {
if(m_pCallBack)
m_pCallBack->OnSocketError(SE_CREATE, MSG_SE_CREATE);
return false;
}

// 设为异步操作方式
unsigned long on = 1;
if (::ioctlsocket(m_socket, FIONBIO, &on) < 0) {
::closesocket(m_socket);
if(m_pCallBack)
m_pCallBack->OnSocketError(SE_CREATE, MSG_SE_CREATE);
return false;
}

sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(m_strip.c_str());
addr.sin_port = htons(m_port);

int rt;
rt = ::connect(m_socket, (sockaddr *) &addr, sizeof(addr));
if (rt == 0) {
OnConnected();
return true;
}

// ==================================================================
timeval to;

// 首先建立连接
fd_set wfds;
fd_set efds;
FD_ZERO(&wfds);
FD_ZERO(&efds);

// test shutdown event each 100ms.
to.tv_sec = 0; 
// CONNECT_TIMEOUT;
to.tv_usec = 100000;

int it = 0;
while(!m_meShutdown.Wait(0) && !m_meConnStop.Wait(0))
{
FD_SET(m_socket, &wfds);
FD_SET(m_socket, &efds);
int n = select(m_socket + 1, NULL, &wfds, &efds, &to);

if (n > 0) {
if(FD_ISSET(m_socket, &wfds))
{
OnConnected();
return true;
}
else
{
//int err = ::WSAGetLastError();
//const char*  msg = GetLastErrorMessage(err);
GNTRACE ("CRemoteLink::Connect : connection attempt failed!\n");
if(m_pCallBack)
m_pCallBack->OnSocketError(SE_CONN, MSG_SE_CONN);
break;
}
} else if (n < 0) {  // Select Error
int err = ::WSAGetLastError();
const char*  msg = GetLastErrorMessage(err);
GNTRACE ("CRemoteLink::Connect : Select Error.[%d] - %s\n", err, msg);
if(m_pCallBack)
m_pCallBack->OnSocketError(err, msg);
break;
}
else
{
it += 100;
if(it > 30000)      // 连接超时 -- (30S)
{
GNTRACE ("CRemoteLink::Connect : Time out.\n");
if(m_pCallBack)
m_pCallBack->OnSocketError(SE_TIMEOUT, MSG_SE_TIMEOUT);
break;
}
}
}
if(m_meConnStop.Wait(0))
{
GNTRACE("连接过程进行时被取消。\n");
}
}
else
{
// 通过代理服务器连接

热心网友 时间:2022-05-04 05:04

1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址; 2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址; 3、如果虚拟地址对应物理地址不在物理内存中,则产生...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 怎么在Linux服务器上测试TCP/UDP端口的连通性 如何让word分栏 linux tcp如何查看哪些端口被占用 如何将Word文档分成左右两栏,要具体操作方法 Linux系统如何抵御TCP洪水攻击 请问如何在word2007中分栏中英文? linux系统中tcp的端口有什么用 word文档中如何将中文左对齐,英文右对齐 word 中英文之间分栏 linux下怎么设置tcp 怎样使用word的分栏使得左边是英文,右边是中文? word文档中如何将中文左对齐,英文右对齐 opaicn燃气热水器13升多少钱? opaicn热水器12l智能数码恒温需要换电池吗? opaicn热水器温度上不去? OPAICN这个牌子真恶心,仅用两个,抽油烟机和热水器,都是坏的,还不维修了,厂家就没有售后么? opaicn热水器零件坏了哪里可以买到? opaicn热水器显示e5是哪里坏了? 电热水器不通电故障修理? opaicn小厨宝热水器怎么不加热? Word里面,怎么把文字分成两栏? linuxtcp重组在哪个线程中进行 word2007怎么分栏 word中文英文怎样一行 Linux的shell编程中,如何将一段字符串进行截取? linux上用tcpdump抓包的问题 linux下tcp客户端能建立多少个长连接 谁能告诉我如何使中英文对照分栏在WORD文档中出现? linux系统中tcp连接释放的时间是多少 linux中tcp timestamp作用? 检查tcp 有没有断开 linux Linux 打开tcp12580端口 上海公交车查询软件哪款最强? 上海公交APP安卓版下载? 查上海公交车、地铁用什么软件 上海公交车几分钟到站的app? 有带上海公交路线查询的地图软件吗 哪个手机app能显示上海实时公交信息 上海公交app好不好用? 上海公交定位软件