我目前正在制作服务器,我学会了这样做:
while(true)
{
SOCKET s = accept(s, ....)
// do something with the connection
printf("connection\n");
}
我了解到在没有连接的情况下它会停留在接受(..)。 在我的程序中还没有任何连接,但它连接溢出?我的意思是我的控制台被“连接”垃圾邮件。
那么什么错?
THX伙计我现在修理了它:)
答案 0 :(得分:2)
很可能它会立即返回一个您似乎没有检查的错误。例如。可能是s没有正确创建等等。
编辑:刚刚注意到你将accept()的结果分配给同一个's',这是非常错误的。你的's'是一个普通的监听套接字,可能由socket()创建,由bind()绑定并设置为listen()监听,而accept()的返回值是另一个套接字,你应该用它来传输数据。 / p>
看一下这个例子(Googling找到):http://www.cs.odu.edu/~cs476/fall03/lectures/sockets.htm
答案 1 :(得分:0)
我调试了一点,我得到的每个失败套接字都有值:4294967295。
答案 2 :(得分:0)
我添加了一些支票:
while(true)
{
SOCKET s =
accept(m_Socket, (sockaddr*)&from, &fromlen);
if(s != SOCKET_ERROR)
{
printf("Client connected to the Server. ");
Client* client = new Client(s); // Memory Leak here .. i know
}
}
虽然没有连接任何客户端,但我的CPU为16%。
答案 3 :(得分:0)
调用WSAGetLastError()并查看它返回的内容。然后可以将此错误代码输入到错误查找工具中(您可以在Visual Studio的工具菜单中找到它)。您很可能错误地初始化了服务器套接字。