小编Toc*_*ave的帖子

接受的套接字上出现“错误文件描述符”错误

我正在尝试进入网络编程并一直在遵循套接字指南。我用 C 语言编写了一个简单的 Windows TCP 服务器和客户端,但似乎无法让它们工作。客户端连接后,服务器会抛出“错误文件描述符”错误并关闭。我不明白刚刚创建的文件描述符怎么accept()可能是坏的。我对此进行了研究,只发现有人在阅读之前关闭了该文件,而我却没有。

这是代码:

服务器

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

int main(int argc, char *argv[])
{
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);

    SOCKET sock, newsock;
    int portno, clilen;
    char buffer[256];
    SOCKADDR_IN serv_addr, cli_addr;
    int n;

    sock = socket(AF_INET, SOCK_STREAM, 0);

    if (sock < 0)
    {
        perror("Error opening socket");
        exit(1);
    }

    memset((char *) &serv_addr, 0, sizeof(serv_addr));
    portno = 5001;

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);

    if (bind(sock, (SOCKADDR *) &serv_addr, sizeof(serv_addr)) < 0)
    { …
Run Code Online (Sandbox Code Playgroud)

c sockets windows networking

3
推荐指数
1
解决办法
5343
查看次数

无法在OpenGL中绘制三角形

我最近开始学习OpenGL,并编写了一些代码来在SDL窗口中绘制一个简单的白色三角形.我已经阅读并重新阅读了我的代码,并且已经根据几个opengl教程中提出的内容进行了检查,但我无法使其工作.我知道opengl正确绑定到SDL,因为我可以使用glClearColor更改窗口背景颜色,但我无法显示该darn三角形.

我很乐意提供更多信息,但说实话,我不知道问题来自哪里,所以这里是我写的代码:

int init()
{
    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        fprintf(stderr, "SDL error : %s\n", SDL_GetError());
        SDL_Quit();
        return -1;
    }

    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);

    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);

    gWindow = SDL_CreateWindow("Test OpenGL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINWIDTH, WINHEIGHT, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
    if (gWindow == NULL)
    {
        fprintf(stderr, "Failed to create window. SDL error : %s\n", SDL_GetError());
        SDL_Quit();
        return -1;
    }

    gGLContext = SDL_GL_CreateContext(gWindow);
    if (gGLContext == 0)
    {
        fprintf(stderr, "Failed to create OpenGL context. SDL error : %s\n", SDL_GetError());
        SDL_DestroyWindow(gWindow);
        SDL_Quit();
        return -1; …
Run Code Online (Sandbox Code Playgroud)

c opengl

1
推荐指数
1
解决办法
678
查看次数

标签 统计

c ×2

networking ×1

opengl ×1

sockets ×1

windows ×1