use*_*115 1 c++ sockets multithreading winsock
我thread
添加时遇到包含模块的问题:
#include <thread>
Run Code Online (Sandbox Code Playgroud)
对bind函数的调用给出了错误:
错误3错误C2440:'=':无法从'std :: _ Bind <_Forced,_Ret,_Fun,_V0_t,_V1_t,_V2_t,_V3_t,_V4_t,_V5_t,>'转换为'int'c:\ users\ohadpeled\documents\visual studio 2012\projects\loginserver\loginserver\server.cpp 87 1 LoginServer 4 IntelliSense:没有合适的转换函数从"std :: _ Bind"到"int"存在c:\ Users\OhadPeled\Documents\Visual Studio 2012\Projects\LoginServer\LoginServer\Server.cpp 87 20 LoginServer
我不明白为什么它会导致这个错误,不包括线程模块,调用工作正常.如果有人能解释我是什么原因,我会很高兴.
这是服务器类的一部分:
/* Set TCP listening socket */
ListenResult = bind(ListenSocket, result->ai_addr, (int)result->ai_addrlen); // Error in this line
if (ListenResult != SOCKET_ERROR)
{
freeaddrinfo(result);
ListenResult = listen(ListenSocket, SOMAXCONN);
if (ListenResult != SOCKET_ERROR)
{
/* Accepting clients */
while(true)
{
ClientSocket = new SOCKET();
ADDR = new SOCKADDR_IN();
ADDRSize = sizeof(*ADDR);
*ClientSocket = accept(ListenSocket, (struct sockaddr*)ADDR, &ADDRSize);
if (*ClientSocket != INVALID_SOCKET)
{
/* I want to thread the handler function over here! */
Handler(ClientSocket, ADDR);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用win7,并使用winsock设置套接字.
问题是编译器正在将bind
符号解析为C++函数std::bind()
而不是WinSock函数bind()
.为了解决这个问题,您可以执行以下两项操作之一:
using namespace std;
源文件中的所有声明; 要么使用范围解析运算符::
显式引用bind
全局命名空间中的函数:
ListenResult = ::bind(...);
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
2183 次 |
最近记录: |