【发布时间】:2010-09-21 07:31:15
【问题描述】:
我正在使用 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;
}
【问题讨论】:
-
这个监听是否只在启动时执行?您绑定的端口是动态的吗?您一次监听了多少个端口?
标签: c++ exception sockets winsock rpc