套接字不接受连接
Socket does not accept connections
我有一个接受客户端套接字连接的服务器套接字。Accept在线程中
套接字创建
int ServerSocket::CreateSocket(int port)
{
listenfd = 0;
struct sockaddr_in serv_addr;
unsigned long iMode = 1;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&serv_addr, '0', sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(port);
ioctlsocket(listenfd, FIONBIO, &iMode);
if (bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0)
{
return 0;
}
if (listen(listenfd, 20) < 0)
{
return 0;
}
return listenfd;
}
插座接受
void ServerSocket::AcceptClients_1(void * p)
{
struct sockaddr_in cli_addr;
// get a pointer to the ServerSocket object
ServerSocket * pThis = (ServerSocket *)p;
int iResult, cli_len;
cli_len = sizeof(cli_addr);
struct timeval tv = { 0, 1000 };
SOCKET s = pThis->GetSocket();
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(s, &rfds);
while (!pThis->ShutDownRequested)
{
iResult = select(s+1, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
if(iResult > 0)
{
// never comes here
SOCKET sclient = accept(s, (struct sockaddr *)&cli_addr,
&cli_len);
}
else if (iResult == 0) /// timeout
{
continue;
}
// error comes here are going to accept 2nd time
DWORD dwError = GetLastError();
return;
}
}
代码来自select()。第一次返回0,但第二次总是返回-1,并返回错误10022。我不明白为什么。请帮忙。
确保pThis->GetSocket()
正确返回listenfd
。此外,您应该在每次调用accept
之前重新初始化cli_len = sizeof(cli_addr);
(这是一个值结果参数)。
iResult=0并不总是意味着超时,对于非阻塞套接字,您需要检查WSAGetLastError并处理一些错误代码,例如WSAEWOULDBLOCK意味着您需要等待该套接字上的下一个事件。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx
相关文章:
- 为什么线程不接受此输入?
- 函数不接受 X 参数,函数使用默认参数
- C++ boost::asio::ip::tcp::acceptor 有时不接受连接器?
- B不接受8作为输入的是什么?C++
- C++数组输入不接受一定数量的整数
- C++概念assignable_from不接受 const&-return 运算符=
- 斯堪夫不接受输入
- C++字符数组不接受超过 4 个字符的输入
- CIN不接受C++中带有空格的输入?
- QObject::连接不起作用 - 使用函数语法找不到信号
- 带有openSSL的libwebsocket服务器不接受连接
- C 套接字服务器不接受任何客户端 /客户端无法连接
- C++ 套接字侦听器 accept() 在发布时不接受连接请求
- MySQL 服务器不接受远程连接
- boost::asio sync server 在第一个连接后不接受连接
- 套接字不接受连接
- 异步服务器不接受连接
- 在Linux上监听套接字连接而不接受调用
- 为什么这个简单的服务器不接受连接?
- DLib - 为什么 start_async() 不接受后台线程中的连接?