请教一下, 我的accept怎么不阻塞呢?

zheyimiao 2010-07-01 11:08:16
以前用的时候都会阻塞的,突然就不阻塞了,代码如下:

#include "stdafx.h"
#include <WinSock2.h>

#pragma comment(lib, "ws2_32.lib")

BOOL InitSocket()
{
WORD word;
WSAData wsaData;
word = MAKEWORD(2, 2);
SecureZeroMemory(&wsaData, sizeof(WSAData));

if (WSAStartup(word, &wsaData))
{
return FALSE;
}

return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{
SOCKET listensock, acceptsock;
sockaddr_in sockAddr = {0};
sockaddr_in sockClient;
int iClientCount = 0;
int iLength = 0;

SecureZeroMemory(&sockClient, sizeof(sockaddr_in));
listensock = INVALID_SOCKET;
acceptsock = INVALID_SOCKET;

if (!InitSocket())
{
printf("InitSocket Failed\n");
goto exit;
}

listensock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (listensock < 0)
{
printf("socket Failed. Error code : %d\n", WSAGetLastError());
goto exit;
}

sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(10001);
sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);

if (bind(listensock, (sockaddr *)&sockAddr, sizeof(sockaddr)))
{
printf("bind Failed. Error code : %d\n", WSAGetLastError());
goto exit;
}

if (listen(listensock, 5))
{
printf("listen Failed. Error code : %d\n", WSAGetLastError());
goto exit;
}

while (true)
{
acceptsock = accept(listensock, (sockaddr*)&sockClient, &iLength);
printf("%d\n", ++iClientCount);
}

exit:
WSACleanup();

if (INVALID_SOCKET != listensock)
{
closesocket(listensock);
listensock = INVALID_SOCKET;
}

if (INVALID_SOCKET != acceptsock)
{
closesocket(acceptsock);
acceptsock = INVALID_SOCKET;
}

system("Pause");
return 0;
...全文
243 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zheyimiao 2010-07-01
  • 打赏
  • 举报
回复
You got it! 谢了
[Quote=引用 4 楼 wangxipu 的回复:]
int iLength = sizeof(sockaddr_in);
[/Quote]
wangxipu 2010-07-01
  • 打赏
  • 举报
回复
int iLength = sizeof(sockaddr_in);
zheyimiao 2010-07-01
  • 打赏
  • 举报
回复
我调试的时候,到达accept语句,没有阻塞就执行下一句了.所以打出的客户信息一直增加.
[Quote=引用 2 楼 chinazhangjie 的回复:]
没细看你的代码,你仔细查一下是不是goto的原因。
[/Quote]
独酌逸醉 2010-07-01
  • 打赏
  • 举报
回复
没细看你的代码,你仔细查一下是不是goto的原因。
cattycat 2010-07-01
  • 打赏
  • 举报
回复
看起来没问题啊,你这个只是accept而已啊。一直在循环等待。没有send,recv收发数据。

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧