Estoy usando winsock y C++ para configurar una aplicación de servidor. El problema que tengo es que la llamada al listen
da como resultado una excepción de primera oportunidad. Supongo que normalmente estos pueden ser ignorados (?) Pero he encontrado que otros tienen el mismo problema que yo y causan que la aplicación se cuelgue de vez en cuando. Cualquier ayuda sería muy apreciada.Excepción de socket: "No hay más puntos finales disponibles en el asignador de extremos"
La primera excepción es la oportunidad:
excepción de primera oportunidad en 0x * 12345678 * en MiApl .exe: 0x000006D9: No hay más extremos disponibles desde el asignador de extremos.
He encontrado alguna evidencia de que esto podría ser causado por el socket Y el código con el que estoy trabajando es el siguiente. La excepción se produce en la llamada al listen
en la quinta línea desde la parte inferior.
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;
}
¿Esta escucha solo se realiza al inicio? ¿El puerto está vinculando a dinámico? ¿Cuántos puertos escuchas en un momento dado? –