yyzybb537 / libgo

Go-style concurrency in C++11
MIT License
3.22k stars 758 forks source link

sample_echo.cpp示例会报错 #157

Open bigbao9494 opened 5 years ago

bigbao9494 commented 5 years ago

在windows下测试了一下sample_echo.cpp,client端无法连接,connect返回错误,不知道 是哪儿不对? @yyzybb537

bigbao9494 commented 5 years ago

sample_echo.cpp示例

1、connet问题可能是: connect_mode_hook函数中有BUG,这个if判断有问题, 应该修改成if (res < 0 && WSAGetLastError() != WSAEINPROGRESS && WSAGetLastError() != WSAEWOULDBLOCK)

if (res < 0 && WSAGetLastError() != WSAEINPROGRESS) {
ErrnoStore es;
setNonblocking(s, false);
return res;
}

2、示例中调用的是write,read 但是windows下并没有对write函数进行hook

3、感觉read_mode_hook也有BUG,使用recv()去读socket数据时不能正常工作,暂时未找到BUG在哪儿

4、windows下是否没有做过“冒烟”测试?示例都未工作

yyzybb537 commented 5 years ago

sample4_echo.cpp是linux的专用测试,里面用的都是linux的syscall,windows上的cmake里面我已经ban掉了这个,你是怎么跑到的?

bigbao9494 commented 5 years ago

晕,我是上次VS编译不过时自己新建的工程来测试的,那么windows是否有sample_echo类似的测试用例?

yyzybb537 commented 5 years ago

sample5_asio呀

bigbao9494 commented 5 years ago

@yyzybb537 刚刚下载在windows下生成VS工程,里面没有一个示例呢?? 只有ALL_BUILD,libgo_static,zero_check啊

bigbao9494 commented 5 years ago

@yyzybb537 VS2015下编译不过呢?

2> CMake does not need to re-run because I:\libgo_new1\libgo-master\vs_proj\CMakeFiles\generate.stamp is up-to-date. 2> config.cpp 2>i:\libgo_new1\libgo-master\libgo\common\util.h(28): error C2061: 语法错误: 标识符“RefObject” 2>i:\libgo_new1\libgo-master\libgo\common\util.h(35): error C2061: 语法错误: 标识符“RefObject” 2>i:\libgo_new1\libgo-master\libgo\common\util.h(61): error C2064: 项不会计算为接受 1 个参数的函数 2> i:\libgo_new1\libgo-master\libgo\common\util.h(61): note: 类不会将“operator()”或用户定义的转换运算符定义到指向函数的指针或指向函数的引用(它们接受适当数量的参数) 2>i:\libgo_new1\libgo-master\libgo\common\util.h(135): error C2511: “void co::Deleter::operator ()(co::RefObject *)”:“co::Deleter”中没有找到重载的成员函数 2> i:\libgo_new1\libgo-master\libgo\common\util.h(27): note: 参见“co::Deleter”的声明 2>i:\libgonew1\libgo-master\libgo\common\util.h(136): error C2597: 对非静态成员“co::Deleter::func”的非法引用 2>i:\libgonew1\libgo-master\libgo\common\util.h(137): error C2597: 对非静态成员“co::Deleter::func”的非法引用 2>i:\libgonew1\libgo-master\libgo\common\util.h(137): error C2597: 对非静态成员“co::Deleter::arg”的非法引用 2>i:\libgo_new1\libgo-master\libgo\common\util.h(147): error C2061: 语法错误: 标识符“T” 2>i:\libgo_new1\libgo-master\libgo\common\util.h(147): error C2535: “co::IncursivePtr::IncursivePtr(void)”: 已经定义或声明成员函数 2> i:\libgo_new1\libgo-master\libgo\common\util.h(146): note: 参见“co::IncursivePtr::IncursivePtr”的声明 2>i:\libgo_new1\libgo-master\libgo\common\util.h(175): error C2143: 语法错误: 缺少“;”(在“&”的前面)