socket 文件描述字传递

在函数里完成了socket的创建,绑定,连接,最后函数返回该套接字文件描述字,在另一个函数里调用该函数,并利用该socket id发送消息,在send成功发送,可是在接收对端的应用中却没有收到信息,但是在对方网卡中却能够抓取到发送的消息. 我把文件描述字的变量改为全局的就好使了, 请问各位大神解释一下这是什么情况呢


 //创建一个tcp socket,并完成客户端与服务器的连接过程
int createSocket()
{
    //socket info to server 
    //agent 设置socket 地址
    struct sockaddr_in client_addr;
    bzero(&client_addr, sizeof(client_addr)); //设置地址结构体为0
    client_addr.sin_family = AF_INET;    //设置internet 协议簇
    client_addr.sin_addr.s_addr = htons(INADDR_ANY);//不设置ip, 监听所用网卡
    client_addr.sin_port = htons(0);    //随机端口
    //创建tcp套接字
    int client_socket = socket(AF_INET, SOCK_STREAM, 0);
    if (client_socket < 0)
    {
        printf("Create Socket Failed.\n");
        LOG_ERROR("Create Socket Failed.");
        return 0;
    }
    //绑定地址
    LOG_DEBUG("to client bind port.");
    if (bind(client_socket, (struct sockaddr*)&client_addr, sizeof(client_addr)))
    {
        printf("Client Bind Port Failed.\n");
        LOG_ERROR("Client Bind Port Failed.");
        return 0;
    }
    LOG_DEBUG("client bind port success.");

    // 服务控制台socket地址
    struct sockaddr_in server_addr;
    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    if (inet_aton(g_cfg.serverip().c_str(), &server_addr.sin_addr) == 0) //ip地址转换
    {
        printf("Server IP address error.\n");
        LOG_ERROR("Server IP address error.");
        return 0;
    }
    server_addr.sin_port = htons(g_cfg.serverport());
    socklen_t server_addr_length = sizeof(server_addr);
    //服务器端建立TCP连接
    LOG_DEBUG("to connect server.");
    if (connect(client_socket, (struct sockaddr*)&server_addr, server_addr_length) < 0)
    {
        printf("can not connect to server.\n");
        LOG_ERROR("can not connect to server.");
        return 0;
    }
    LOG_DEBUG("connect server success.");

    return client_socket;
}
在其他函数中调用:
int sock = createSocket();
if ( send(sock, sendMsg.c_str(), 1024, 0) <= 0)
{
     printf("send error\n");
}

send 成功, 对方网卡也能抓到包, 但服务器就是收不到信息, 我把client sococke改成一个全局的就好了, 这是怎么回事呀,想不明白了

1个回答

传递socket的时候,传递指针或引用等,防止被复制多份

w18mc0431
兜兜空荡荡 代码贴出来了, 麻烦你帮我看看呗
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问