c语言socket编程中accept的阻塞问题
//这是服务器端,你可以看作伪代码intmain()ServerSocketlsock(4000);//创建监听套接字监听4000端口cout<<"ListenningP...
//这是服务器端,你可以看作伪代码
int main()
ServerSocket lsock(4000);//创建监听套接字监听4000端口
cout<<"Listenning Port 4000"<<endl;
while(1){
Socket dsock=lsock.accept();//等待连接
MyThread t(dsock);
t.start();//创建一个新线程处理数据套接字
}
}
其中的accept其实最终调用的是
accept(m_sock,(sockaddr*)&m_socketaddress,&sa_size);
首次进入循环的时候在此处阻塞,没问题,但是当一个连接建立之后,再次调用该函数就变成非阻塞了,而是返回一个0,为什么会这样呢?怎么样才能让每次调用accept的时候都阻塞呢?
说错了,accept返回的是-1
WSAGetLastError在第一次accept返回-1之后,返回的是0
WSAGetLastError在第二次及以后accept返回-1之后,返回的是10093 展开
int main()
ServerSocket lsock(4000);//创建监听套接字监听4000端口
cout<<"Listenning Port 4000"<<endl;
while(1){
Socket dsock=lsock.accept();//等待连接
MyThread t(dsock);
t.start();//创建一个新线程处理数据套接字
}
}
其中的accept其实最终调用的是
accept(m_sock,(sockaddr*)&m_socketaddress,&sa_size);
首次进入循环的时候在此处阻塞,没问题,但是当一个连接建立之后,再次调用该函数就变成非阻塞了,而是返回一个0,为什么会这样呢?怎么样才能让每次调用accept的时候都阻塞呢?
说错了,accept返回的是-1
WSAGetLastError在第一次accept返回-1之后,返回的是0
WSAGetLastError在第二次及以后accept返回-1之后,返回的是10093 展开
3个回答
展开全部
Socket dsock
MyThread t
这2个都是栈变量,这里肯定有问题.
多线程的另一个线程里需要使用它,它却因为while的另一次循环而失效了.
先改成堆变量试试,然后再改成让线程来delete它,以免造成内存泄漏.
MyThread t
这2个都是栈变量,这里肯定有问题.
多线程的另一个线程里需要使用它,它却因为while的另一次循环而失效了.
先改成堆变量试试,然后再改成让线程来delete它,以免造成内存泄漏.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在
Socket dsock=lsock.accept();//等待连接
后面看一下WSAGetLastError()返回什么错误。
Socket dsock=lsock.accept();//等待连接
后面看一下WSAGetLastError()返回什么错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询