套接字始终返回INVALID_SOCKET

纳达夫·图格曼

我正在尝试为学校项目创建多线程服务器,并且我依赖于我过去编写的类似代码,但是由于某种原因,该open函数始终会进入if语句并崩溃。是什么阻止了它创建套接字?

#pragma comment(lib, "Ws2_32.lib")
#include <WinSock2.h>
#include <exception>
#include <iostream>
#include <string>
#include <numeric>
#include <deque>
#include <queue>
#include <mutex>
#include <condition_variable>

void accept();
void open();
void close();
void bindAndListen();

#ifdef _DEBUG
#include <stdio.h>
#define TRACE(msg, ...) printf(msg "\n", __VA_ARGS__);

#else
#define TRACE(msg, ...) printf(msg "\n", __VA_ARGS__);
#define TRACE(msg, ...)
#endif

static const unsigned short PORT = 8826;
static const unsigned int IFACE = 0;
SOCKET _socket;

void clientHandler(SOCKET client_socket);
void close();
int main()
{
    open();
}

void bindAndListen()
{
    struct sockaddr_in sa = { 0 };
    sa.sin_port = htons(PORT);
    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = IFACE;

    if (bind(_socket, (struct sockaddr*) & sa, sizeof(sa)) == SOCKET_ERROR)
        throw std::exception(__FUNCTION__ " - bind");
    TRACE("binded");

    if (listen(_socket, SOMAXCONN) == SOCKET_ERROR)
        throw std::exception(__FUNCTION__ " - listen");
    TRACE("listening...");
}

void clientHandler(SOCKET client_socket)
{
    std::cout << "hello";
}

void close()
{
    TRACE(__FUNCTION__ " closing accepting socket");
    try
    {
        closesocket(_socket);
    }
    catch (...) {}
}
void open()
{
    _socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (_socket == INVALID_SOCKET)
        throw std::exception(__FUNCTION__ " - socket");
}

void accept()
{
    SOCKET client_socket = accept(_socket, NULL, NULL);
    if (client_socket == INVALID_SOCKET)
        throw std::exception(__FUNCTION__);

    TRACE("Client accepted !");
    // create new thread for client and detach from it
    std::thread tr(&clientHandler, _socket);
    tr.detach();
}
米克尔·里奇利斯基

您应该调用WSAGetLastError来获取导致返回INVALID_SOCKET的实际错误代码。

在这种情况下,您似乎没有在调用WSAStartup,因此收到了WSANOTINITIALISED错误。

使用任何Winsock函数之前,必须先调用WSAStartup。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

套接字始终返回-1

来自分类Dev

在 socket.io 中收集套接字返回的结果

来自分类Dev

PHP socket_select()始终将套接字检测为可从中读取

来自分类Dev

PHP socket_select()始终将套接字检测为可从中读取

来自分类Dev

C / C ++ Posix BSD套接字-HTTP请求始终返回状态400

来自分类Dev

套接字始终断开C ++的连接

来自分类Dev

TCP套接字发送/接收始终等待

来自分类Dev

套接字接收不返回

来自分类Dev

套接字sendto()返回EINVAL

来自分类Dev

套接字返回“[对象对象]”

来自分类Dev

返回连接的套接字返回 null

来自分类Dev

ServerSocket与Socket-关闭套接字

来自分类Dev

lua-socket:Unix域套接字?

来自分类Dev

lua-socket:Unix域套接字?

来自分类Dev

当“连接”时,Socket.io中的服务器端套接字返回错误的名称空间

来自分类Dev

当“连接”时,Socket.io中的服务器端套接字返回错误的名称空间

来自分类Dev

C ++ IP服务器套接字始终从PHP套接字客户端接收“ 0100000001000000”

来自分类Dev

.NET Web套接字返回200错误

来自分类Dev

套接字connect()返回errno EINVAL

来自分类Dev

套接字HTTP请求返回无效的GZIP

来自分类Dev

写入TCP套接字不断返回EAGAIN

来自分类Dev

通过Java套接字返回多个值

来自分类Dev

套接字C ++:recv函数返回-1

来自分类Dev

写入TCP套接字不断返回EAGAIN

来自分类Dev

套接字客户端返回变量

来自分类Dev

关于读取套接字的返回值

来自分类Dev

套接字始终不经过身份验证

来自分类Dev

PayPal沙箱IPN验证始终返回INVALID

来自分类Dev

PHP套接字应该返回json但返回警告