我正在使用 winsock 和 C++ 来设置服务器应用程序。我遇到的问题是调用listen
导致第一次机会异常。我想通常这些可以忽略(?),但我发现其他人有同样的问题,它导致应用程序每隔一段时间就会挂起。任何帮助将不胜感激。
第一次机会例外是:
MyApp .exe中 0x*12345678* 处的第一次机会异常:0x000006D9:端点映射器中没有更多可用的端点。
我发现一些证据表明这可能是由套接字引起的,我正在使用的代码如下。listen
异常发生在从底部数第五行的调用中。
m_accept_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_accept_fd == INVALID_SOCKET)
{
return false;
}
int optval = 1;
if (setsockopt (m_accept_fd, SOL_SOCKET, SO_REUSEADDR,
(char*)&optval, sizeof(optval)))
{
closesocket(m_accept_fd);
m_accept_fd = INVALID_SOCKET;
return false;
}
struct sockaddr_in local_addr;
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = INADDR_ANY;
local_addr.sin_port = htons(m_port);
if (bind(m_accept_fd, (struct sockaddr *)&local_addr,
sizeof(struct sockaddr_in)) == SOCKET_ERROR)
{
closesocket(m_accept_fd);
return false;
}
if (listen (m_accept_fd, 5) == SOCKET_ERROR)
{
closesocket(m_accept_fd);
return false;
}