小编dal*_*iam的帖子

IOCP C++ TCP客户端

我在实施TCP IOCP客户端时遇到了一些麻烦.我已经在Mac OSX上实现了kqueue,所以我希望在Windows上做类似的事情,我的理解是IOCP是最接近的东西.主要问题是GetCompetetionStatus永远不会返回并且总是超时.我假设我在创建要监控的句柄时遗漏了一些东西,但不确定是什么.这是我到目前为止的地方:

我的连接例程:(为清晰起见,删除一些错误处理)

struct sockaddr_in server;
struct hostent *hp;
SOCKET sckfd;
WSADATA wsaData;

int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );


if ((hp = gethostbyname(host)) == NULL)
    return NULL;
WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED)
if ((sckfd = WSASocket(AF_INET,SOCK_STREAM,0, NULL, 0, WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)
{
    printf("Error at socket(): Socket\n");
    WSACleanup();
    return NULL;
}

server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr = *((struct in_addr *)hp->h_addr);
memset(&(server.sin_zero), 0, 8);

//non zero means non blocking. 0 is blocking.
u_long iMode = -1;
iResult = ioctlsocket(sckfd, FIONBIO, &iMode);
if …
Run Code Online (Sandbox Code Playgroud)

c++ windows tcp iocp

6
推荐指数
1
解决办法
5547
查看次数

标签 统计

c++ ×1

iocp ×1

tcp ×1

windows ×1