我使用winsock和C++來設置服務器應用程序。我遇到的問題是撥打listen
會導致第一次機會例外。我想通常這些可以被忽略(?),但我發現其他人有同樣的問題,我在哪裏它導致應用程序每隔一段時間掛起。任何幫助將不勝感激。套接字例外:「端點映射程序中沒有更多端點可用」
的第一次機會異常是:0x000006D9:在MyApp的 .EXE在爲0x * 12345678 *
第一次機會異常有可從終結點映射器沒有更多的終結點。
我發現了一些證據表明這可能是由套接字造成的而我正在使用的代碼如下。在從底部開始的第五行調用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;
}
這聽是隻在啓動時執行嗎?端口是否與動態綁定?您同時收聽多少個端口? – 2008-11-07 16:59:49