小编Art*_*yom的帖子

在写入被阻止的套接字上使用TCP Keep-Alive获取断开连接通知

我使用TCP Keep-Alive选项来检测死连接.它适用于使用读取套接字的连接:

setsockopt(mysock,...) // set various keep alive options

epoll_ctl(ep,mysock,{EPOLLIN|EPOLERR|EPOLLHUP},)
epoll_wait -> (exits after several seconds when remove host disconnects cable)
Run Code Online (Sandbox Code Playgroud)

Epoll等待在套接字上使用EPOLLIN | EPOLLHUP退出而没有问题.

但是,如果我尝试向socket写入很多东西,直到我得到EAGAIN然后轮询读取和写入,我在断开电缆时没有出错:

setsockopt(mysock,...) // set various keep alive options

while(send() != EAGAIN)
   ;
epoll_ctl(ep,mysock,{EPOLLIN|EPOLLOUT|EPOLERR|EPOLLHUP},)
epoll_wait -> --- Never exits!!!! even when the cable of the remove host is disconnected!!!
Run Code Online (Sandbox Code Playgroud)
  • 怎么解决这个问题?
  • 有没有人见过类似的问题?
  • 任何可能的方向?

编辑:附加信息

当我监控与wireshark的通信时,在第一种情况下(读取)我会在几秒钟内得到一次ack请求.但在第二种情况下,我根本检测不到.

linux epoll tcp keep-alive

4
推荐指数
1
解决办法
1万
查看次数

有没有理由不使用Visual Studio 6 for C++?

我有什么理由不使用Visual Studio 6进行C++开发吗?

  • 我在哪里可以找到一些资源,为什么这会或不会是一个好主意?
  • 我有什么问题清单吗?

c++ visual-c++-6

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

CMake:如何将编译器标志添加到非默认编译器

您好我想用intel编译器构建一个项目.

使用默认gcc我经常运行:

cmake -DCMAKE_CXX_FLAGS=-I/some/path  /path/to/project
Run Code Online (Sandbox Code Playgroud)

这很好用.

cmake -DCMAKE_CXX_COMPILER=icpc -DCMAKE_C_COMPILER=icc  -DCMAKE_CXX_FLAGS=-I/some/path  /path/to/project
Run Code Online (Sandbox Code Playgroud)

当我尝试使用非默认编译器时,它根本不会将CMAKE_CXX_FLAGS变量内容路径到编译器.

如何解决这个问题?

正确的答案是:

  1. 您需要指定CMAKE_CXX_FLAGS变量的类型:

    -DCMAKE_CXX_FLAGS:STRING=-I/some/path
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您需要提供C和C++编译器的完整路径:

    cmake -DCMAKE_C_COMPILER=/opt/intel/bin/icc -DCMAKE_CXX_COMPILER=/opt/intel/bin/icpc -DCMAKE_CXX_FLAGS:STRING=-some-flag
    
    Run Code Online (Sandbox Code Playgroud)

c++ cross-platform cmake

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

什么应该让Unix程序员知道使用Microsoft Tools?

我来自UNIX世界,我对Linux,Solaris,Cygwin和MinGW开发非常熟悉.最近我移植了一个支持MSVC的大项目(cppcms),包括使用CMake构建静态和动态库.

我总是得到绝对奇怪的问题:

  1. 我有CMake构建问题,因为Windows编程 缺少 导入和静态库的命名约定.
  2. 现在我发现我应该根据我做的实际构建使用不同版本的ICU(调试/发布版本)(Debug/RelWithDebInfo - 应该使用Debug ICU,Release release ICU),所以我应该根据实际的搜索库更改实际约定在MSVC下调试/释放模式.否则应用程序只是不会开始在丢失的DLL上给出错误.

    我在Mingw或Cygwin下使用GCC,使用Sun Studio的Open Solaris或使用gcc或intel编译器的Linux下没有任何此类问题.

  3. 而且我仍然有许多有线问题和有线错误以及非常奇怪的行为 - 甚至一些微不足道的事情在MSVC构建下都无法工作,当Solaris/Linux/Cygwin/Mingw在使用GCC从3.4到4.4,Sun Studio的一切正常工作时和英特尔编译器).但不是在MSVC下.

    说实话,我不知道如何处理最后一个!因为对我来说它更像是环境问题.

我知道问题的定义并不是很明确.我认为我是一个非常有经验的开发人员,我知道如何编写可移植的和良好的C++代码.但是使用微软的原生 工具让我疯狂,因为我不知道如何解决这些问题.

问:我应该有经验的Unix程序员在Win32 API的相当不错的基础它开始使用正版Microsoft工具时,应该知道吗?

PS:有人可以解释为什么"Release With Debug Info"需要调试版本的MSVC运行时?为什么存在两个版本的运行时

PPS:请注意我没有Win32 API的问题,实际上Windows GCC构建工作正常.

澄清:

我正在寻找来自Unix世界的程序员可能陷入的陷阱.

例如,从Linux迁移到Solaris时:确保使用-mt-pthreads使用多线程程序编译代码时,使用-lpthread链接是不够的.

unix winapi build cmake visual-c++

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

向量如何分配内存

HII我知道矢量分配的连续固定的内存时,它需要如果它不能够适应它,它会alllocate新的内存和旧的值复制到其中并删除旧内存的push_back一些items.And.如果是下面的代码是如何工作的情况下

#include<iostream>  
#include<vector>  
using namespace std;   

class Test   
{
public :   
    int val;   
    Test()   
    {
        val=0;   
    }   
};   


int main()   
{
    vector<Test>vec;   
    Test t[10];   
    for (int i=0;i<5;i++)   
        vec.push_back(t[i]);   
    cout<<vec.capacity()<<endl; //printing 8   
    Test* obj=&vec[2];   
    obj->val=2;   
    cout<<obj<<endl;   
    for (int i=0;i<5;i++) //Adding 5 elements more 
        vec.push_back(t[i]);   
    Test* obk=&vec[2];    
    cout<<obk->val<<endl;    
    cout<<obj->val<<endl;    
    cout<<obj<<endl;  
    cout<<obk<<endl;  
}  
Run Code Online (Sandbox Code Playgroud)

在这里,如果你看到obj正在使用vec [2]的指针,我的机器中的值即将到来0x8bcb048.然后我又插入了5个项目,因此vector将分配新的内存.现在,如果我从向量[2]中获取obk它会变得不同地址0x8bcb070.但如果我试图在obj的帮助下接受我没有给出任何问题.任何理由?

c++

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

gcc向量扩展中的未对齐加载/存储

我需要使用GCC向量扩展来访问未对齐的值

下面的程序崩溃了 - 包括clang和gcc

typedef int __attribute__((vector_size(16))) int4;
typedef int __attribute__((vector_size(16),aligned(4))) *int4p;

int main()
{
        int v[64] __attribute__((aligned(16))) = {};
        int4p ptr = reinterpret_cast<int4p>(&v[7]);
        int4 val = *ptr;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我改变

typedef int __attribute__((vector_size(16),aligned(4))) *int4p;
Run Code Online (Sandbox Code Playgroud)

typedef int __attribute__((vector_size(16),aligned(4))) int4u;
typedef int4u *int4up;
Run Code Online (Sandbox Code Playgroud)

生成的汇编代码是正确的(使用未对齐的加载) - 在clang和gcc中.

单一定义有什么问题或者我错过了什么?clang和gcc都可以是同一个bug吗?

注意:它发生在clang和gcc中

c++ gcc simd clang

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

处理Paypal和本地数据库之间的交易

处理应用程序和paypal之间的事务的最佳实践是什么.

考虑:

  • 我是爱丽丝,我想把钱寄给鲍勃
  • 在我的数据库中,我看到Bob有200美元,我想给他150美元.
  • 一旦发送了交易,我想更新Bob的账户,使其包含50美元.

现在根据PayPal API,我可以发送Pay并获得成功.但是,如果我发送Pay成功但由于网络问题而无法收到响应,会发生什么.所以我认为错误发生了并再试一次,从技术上讲,我会向Bob发送300美元而不是150美元?

如何在保留帐户的本地数据库和远程PayPal API之间处理此类事务?

database transactions paypal distributed-transactions

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

LoadLibraryW和POSIX路径分隔符

LoadLibrary的MSDN文档警告不要使用普通的Unix斜杠"/":

指定路径时,请确保使用反斜杠(\),而不是正斜杠(/).

在调用此API时,我无法使用正斜杠或反斜杠(或两者)找到任何问题.我尝试了以下路径名:

c:/foo/bar/baz.dll
/foo/bar/baz.dll
c:/foo/bar\\baz.dll
/foo/bar\\baz.dll
./bar/baz.dll
Run Code Online (Sandbox Code Playgroud)

所有组合都按预期工作.为什么MSDN建议不要使用正斜杠作为路径分隔符?

编辑:

关于UNC名称,它也适用于"//127.0.0.1/c$/foo/bar/baz.dll".

是的,如果添加"\?\",它不会加载库,但_wfopen也无法打开文件.LoadLibraryW与接受/不接受正斜杠的任何其​​他Windows API有何不同?为什么有关于LoadLibraryW而不是CreateFileW的明确警告.

CreateFile:https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v = vs.85).aspx

要创建或打开的文件或设备的名称.您可以在此名称中使用正斜杠(/)或反斜杠().

LoadLibrary:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v = vs.85).aspx

指定路径时,请确保使用反斜杠(),而不是正斜杠(/).

当使用正斜杠(/)时,是否存在其他可能导致LoadLibrary失败的陷阱,而其他Windows API会接受正斜杠而没有任何问题?

dll winapi posix loadlibrary

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

哪些是HTML/XHTML表单中的有效控制字符

我想创建表单验证单元,除了"常规"测试之外还检查编码.

根据这篇文章http://www.w3.org/International/questions/qa-forms-utf-8,允许的字符是CR,LF和TAB,范围为0-31,DEL = 127不允许.

另一方面,控制字符在0x80-0xA0范围内.在不同的来源,我看到他们被允许,而不是.我也看到过这与XHTML,HTML和XML不同.

有些文章告诉过FF也是允许的吗?

有人可以提供一个很好的答案来源可以给予什么,什么不是?

编辑:即使在那里http://www.w3.org/International/questions/qa-controls有些含糊不清

支持C1范围

但表显示它们是非法的,之前显示的UTF-8验证允许它们吗?

html validation xhtml encoding special-characters

0
推荐指数
2
解决办法
2501
查看次数