Programación de sockets de Windows: código de error de enlace -1, ¿cómo solucionarlo?
Consulte lo siguiente:
SOCKET
server_socket
SOCKADDR_IN
internet_addr;
int
ret,
error,
addr_len
PROXY_SOCK_PARAM_T
*_param; /p >
HANDLE
hThread;
unsigned
int
thid;
// p>
Crear
socket
server_socket
=
socket(AF_INET,
SOCK_STREAM,
IPPROTO_TCP);
if(server_socket
==
INVALID_SOCKET)
/*
Llamar
socket
Falló,
Devolver
INVALID_SOCKET,
Llamar
p>
WSAGetLastError()
Puedes ver el código de error
*/
{
error
=
WSAGetLastError();
//
TODO:
Manejo de errores p>
retorno p>
0;
}
//
Realizar
Socket p>
Enlazar
internet_addr.sin_family
=
PF_INET;
internet_addr.sin_port
=
htons(PROXY_SERVER_PORT);
internet_addr.sin_addr.s_addr
=
htonl(INADDR_ANY);
ret
=
bind(server_socket,
(SOCKADDR
*)amp; internet_addr,
sizeof(internet_addr));
if(ret
!=
0)
/*
bind
Devuelve con éxito
0.
En caso contrario, devuelve
SOCKET_ERROR,
Llamar
WSAGetLastError()
Puedes ver el código de error
*/
{
error
=
WSAGetLastError();
closesocket(server_socket);
//
TODO:
Manejo de errores
return
0;
}
//
en
enchufe
Monitor encendido
>ret
=
escuchar(server_socket,
128);
/*
escuchar p>
Regresar exitosamente
0.
De lo contrario, regresar
SOCKET_ERROR,
Llamar
WSAGetLastError ()
Puedes ver el código de error
*/
if(ret
!=
0)
{
error
=
WSAGetLastError();
closesocket(server_socket);
//
TODO:
Manejo de errores
return
0;
}
std::cout
lt;lt;
"[PROXY-SERVR]
Puerto
5200
Inicio de escucha..."
lt;lt;
std::endl;
//
Recibir solicitudes de clientes
for(;;)
{
//
Organizar los datos pasados al nueva estructura del hilo
_param
=
(PROXY_SOCK_PARAM_T
*)malloc(sizeof(PROXY_SOCK_PARAM_T));
_param-gt;server_socket
=
server_socket;
addr_len
=
sizeof(_param -gt ; client_addr);
_param-gt; client_socket
=
aceptar(
_param-gt; server_socket, p>
(SOCKADDR
*)amp; (_param-gt; client_addr),
amp (addr_len));
if(_param; -gt ;socket_cliente
==
SOCKET_INVALID)
{
error
=
WSAGetLastError();
//
TODO:
Manejo de errores
}
else p>
{
//
Crear hilo de trabajo
hThread
=
(HANDLE )_beginthreadex(NULL,
0,
server_work_thread,
(void
*)_param,
0,
amp; thid);
if(hThread
==
INVALID_HANDLE_VALUE)
{
free(_param);
}
else
{
CloseHandle(hThrea
d);
}
}
}