小编xgw*_*ang的帖子

如何模拟linux中socket/tcp编程的异常情况,比如终止连接的一端?

我正在学习使用SO_SNDTIMEOSO_RCVTIMEO来检查超时.它易于使用读取插座.但是当我想检查写入超时时,它总是返回成功.这就是我所做的:(全部处于阻止模式)

  1. 关闭客户端读取套接字并在服务器开始写入之前退出
  2. 在服务器开始写入之前终止客户端
  3. 接受之后但在写入之前拔掉服务器的电缆

好吧,似乎所有这些案例写成只是成功回归.我认为原因应该是端口是由os管理的资源,并且在客户端,程序消失后,tcp连接仍然显示FIN_WAIT2状态.

那么,有没有方便的方法来模拟写入可以接收错误的一些情况,例如EPIPE,EAGAIN

c sockets linux tcp

6
推荐指数
2
解决办法
3691
查看次数

使用unordered_map移动构造函数

我有一些代码:

Class A{
//...A has a move ctor here.
};

unordered_map<int, A> bla;
A tmp;
//operations on tmp
bla.insert(make_pair<int, A>(1, move(tmp)));
Run Code Online (Sandbox Code Playgroud)

我想调用移动构造函数而不是复制类A的ctor.这段代码是否正确?我认同.奇怪的是它编译并适用于Ubuntu Precise(g ++ show version of 4.6.3).但是在CentOS上,它无法编译.前几行是:

 In substitution of ‘template<class _From1, class _To1> static decltype     ((__test_aux<_To1>(declval<_From1>()), std::__sfinae_types::__one()))     std::__is_convertible_helper<_From, _To, false>::__test(int) [with _From1 = _From1; _To1 = _To1; _From = const A&; _To = A] [with _From1 = const A&; _To1 = A]’:
/gcc/x86_64-redhat-linux/4.7.1/../../../../include/c++/4.7.1/type_traits:1258:70:   required from ‘constexpr const bool std::__is_convertible_helper<const A&, A, false>::value’
/gcc/x86_64-redhat-linux/4.7.1/../../../../include/c++/4.7.1/type_traits:1263:12:   required from ‘struct std::is_convertible<const A&, …
Run Code Online (Sandbox Code Playgroud)

c++ linux gcc unordered-map c++11

4
推荐指数
2
解决办法
4272
查看次数

为大型本地数据处理扩展堆栈的大小是一个好主意吗?

我的环境是gcc,C++,Linux.当我的应用程序进行一些数据计算时,它可能需要一个"大"(可能是几MB)的内存数来存储数据,计算结果和其他东西.我使用了一些新的代码,删除来完成这个.由于在某些功能范围之外没有所有权,我认为所有这些内存都可以在堆栈中分配.

问题是,默认堆栈大小(我的系统中为8192Kb)可能不够.我可能需要更改这些堆栈分配的堆栈大小.更重要的是,如果将来计算需要更多数据,我可能需要再次扩展堆栈大小.

那么扩展堆栈大小是一种选择吗?由于无法为特定功能分配,它将如何影响整个应用程序?是不是真的到堆栈,而不是在堆中分配数据有所改善吗?

c++ linux memory memory-management

3
推荐指数
1
解决办法
160
查看次数

当epoll可用时,epoll会完全取代select/poll吗?

我是插座的新手,我正在学习/阅读一些epoll材料和代码.我的问题是,当epoll在系统(Linux)中可用时,epoll可以完全取代select/poll吗?

我认为套接字编程也应该有一些在实践中遵循的范例.当我阅读代码时,我发现一些"选择"带有"epoll":

  1. 服务器代码在处理阻塞套接字时使用select.我认为epoll(LT)的行为与select相同,所以可以使用epoll替换所有select.

  2. 一些遗留代码使用epoll进行监控.事件返回后,select在相应的fd上用于在读/写之前"检查"它.我不太确定这个"选择"的含义.

我对这些"选择"代码感到困惑,希望有人可以提供帮助.

sockets linux select epoll

2
推荐指数
1
解决办法
1422
查看次数

标签 统计

linux ×4

c++ ×2

sockets ×2

c ×1

c++11 ×1

epoll ×1

gcc ×1

memory ×1

memory-management ×1

select ×1

tcp ×1

unordered-map ×1