如果关闭select建立的线程?

protoss883 2005-09-21 08:49:08
请教,如果关闭非阻塞模式下建立的select线程。测试代码如下:

void testconnect()
{
const WORD wMinVer = 0x0101;
WSADATA wsaData;
SOCKADDR_IN sa;
unsigned long non_blocking = 1;
int ret = 1;

struct timeval tv;
fd_set writefds;
// 设置连接超时时间
tv.tv_sec = 10; // 秒数
tv.tv_usec = 0; // 毫秒

WSAStartup(wMinVer, &wsaData);
sock = socket(PF_INET, SOCK_STREAM, 0);
non_blocking = ioctlsocket(sock, FIONBIO, &non_blocking);
sa.sin_family = AF_INET;
sa.sin_port = htons(6789);
sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

if (connect(sock, (SOCKADDR*)&sa, sizeof(sa)) == -1){
FD_ZERO(&writefds);
FD_SET(sock, &writefds);
if(select(sock+1,NULL,&writefds,NULL,&tv) != 0){
FD_ISSET(sock,&writefds);
}
}

if (ret != SOCKET_ERROR ) {
AfxMessageBox("连接成功");
}
shutdown(sock , 2);
closesocket(sock);
WSACleanup();
sock = NULL;
}


函数运行没有问题,能够连接成功。但是问题是在函数运行前,在任务管理器中该程序只有一个线程。而该函数运行完后,就变成两个线程了。我跟了一下,发现在
if (connect(sock, (SOCKADDR*)&sa, sizeof(sa)) == -1){
之后就多出了一根线程,而且这根线程在函数退出后也不会消失。

我现在要做的程序需要多次切换服务连接,需要多次重启服务。但是每次都会多一个线程出来。虽然程序可以继续运行,但是会发现程序占用内存越来越多。

当我把socket改为阻塞模式,再去connect的时候,就不会多线程出来了。我猜可能是非阻塞用select的缘故吧。希望知道怎么关闭这个多出来的线程的大大给我说一下?!
...全文
95 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Lighter 2005-09-21
shutdown(SD_SEND)
回复
Lighter 2005-09-21
FD_CONNECT 的时候线程就关闭了。
回复
protoss883 2005-09-21
自己顶一下,急!
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-09-21 08:49
社区公告
暂无公告