winsock と C++ を使用してサーバー アプリケーションをセットアップしています。私が抱えている問題は、への呼び出しがlisten
最初のチャンスの例外になることです。通常、これらは無視できると思いますが (?)、同じ問題を抱えている他の人を見つけました。アプリケーションが時々ハングする原因です。どんな助けでも大歓迎です。
最初の例外は次のとおりです。
MyApp .exeの 0x*12345678* での初回例外: 0x000006D9: エンドポイント マッパーから使用できるエンドポイントはこれ以上ありません。
これがソケットが原因である可能性があるという証拠をいくつか見つけました。私が使用しているコードは次のとおりです。例外はlisten
、下から 5 行目の への呼び出しで発生します。
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;
}