bind错误码10038如何解决?
参考下面:
Socket server_socket;
SOCKADDR_IN internet_addr;
int ret, error, addr_len;
PROXY_SOCK_PARAM_T *_param;
HANDLE hThread;
unsigned int thid;
// 创建 socket
server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(server_socket == INVALID_SOCKET) /* 调用 socket 不成功, 返回 INVALID_SOCKET,
调用 WSAGetLastError() 可查看错误代码 */
{
error = WSAGetLastError();
// TODO: 错误处理
return 0;
}
// 进行 Socket 绑定
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 *)&internet_addr, sizeof(internet_addr));
if(ret != 0) /* bind 成功返回 0. 否则返回 SOCKET_ERROR, 调用 WSAGetLastError() 可查看错误代码 */
{
error = WSAGetLastError();
closesocket(server_socket);
// TODO: 错误处理
return 0;
}
// 在 socket 上进行监听
ret = listen(server_socket, 128); /* listen 成功返回 0. 否则返回 SOCKET_ERROR,
调用 WSAGetLastError() 可查看错误代码 */
if(ret != 0)
{
error = WSAGetLastError();
closesocket(server_socket);
// TODO: 错误处理
return 0;
}
std::cout << "[PROXY-SERVR] 端口 5200 监听启动..." << std::endl;
// 接收来自客户端的请求
for(;;)
{
// 组织传递给新线程的数据结构
_param = (PROXY_SOCK_PARAM_T *)malloc(sizeof(PROXY_SOCK_PARAM_T));
_param->server_socket = server_socket;
addr_len = sizeof(_param->client_addr);
_param->client_socket = accept( _param->server_socket,
(SOCKADDR *)&(_param->client_addr),
&(addr_len));
if(_param->client_socket == INVALID_SOCKET)
{
error = WSAGetLastError();
// TODO: 错误处理
} else {
// 创建工作线程
hThread = (HANDLE)_beginthreadex(NULL, 0, server_work_thread, (void *)_param, 0, &thid);
if(hThread == INVALID_HANDLE_VALUE)
{
free(_param);
} else {
CloseHandle(hThread);
}
}
}
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有