每个客户端可以有多个套接字文件描述符吗?

阿尔法编码

我正在编码一个服务器程序和一个客户端程序。由于客户端进程可以是无限的(它仅在中断之后结束),我认为我可以thread在客户端进程中创建一个以在服务器进程断开连接时自行断开连接,因此服务器可以向客户端发送消息以断开连接。客户也是。

这里的问题是,将客户端连接到服务器仅返回一个套接字文件描述符,当服务器断开连接并使用套接字缓冲区中的某些数据时可以使用该套接字文件描述符,这样会对程序的主要目的产生负面影响,因此我想对服务器使用另一个套接字文件描述符进行断开连接thread我怎样才能做到这一点?

这是我用来连接两个进程的功能:

服务器:

int socketConfig (connection_info cinfo) {

    int socketfd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);

    if (socketfd < 0) {
        write(1, "Socket error\n", strlen("Socket error\n"));
        return -1;
    }

    struct sockaddr_in s_addr;
    memset (&s_addr, 0, sizeof (s_addr));
    s_addr.sin_family = AF_INET;
    s_addr.sin_port = htons(cinfo.port);
    s_addr.sin_addr.s_addr = INADDR_ANY;

    if (bind (socketfd, (void *) &s_addr, sizeof (s_addr)) < 0) {
        write(1, "Bind error\n", strlen("Bind error\n"));
        return -1;
    }

    listen(socketfd, 3);

    return socketfd;
}

int receiveClient(int serverfd) {
    struct sockaddr_in client;
    socklen_t len = sizeof(client);

    return accept(serverfd, (void *) &client, &len);
}

客户:

int connect_to_server(Config config) {
    struct sockaddr_in client;
    int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    write(1, "Connecting Jack...\n", strlen("Connecting Jack...\n"));

    if (sockfd < 0) {
        write(1, "Error creating the socket\n", strlen("Error creating the socket\n"));
        return -1;
    }

    memset(&client, 0, sizeof(client));

    client.sin_family = AF_INET;
    client.sin_port = htons(config.port_jack);

    if (inet_aton(config.ip_jack, &client.sin_addr) == 0) {
        write(1, "Invalid IP address\n", strlen("Invalid IP address\n"));
        return -1;
    }

    if (connect(sockfd, (void *) &client, sizeof(client)) < 0) {
        write(1, "Error connecting to Jack\n", strlen("Error connecting to Jack\n"));
        return -1;
    }

    return sockfd;
}

服务器在关闭连接时不需要“发送消息”,TCP / IP堆栈将为您完成此操作。

然后,客户端在进行读取时将收到0个字节,以指示另一侧已关闭连接。无需单独的插座。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python 客户端-服务器套接字错误 [Errno 9] 错误的文件描述符

来自分类Dev

套接字文件描述符可以传递给子进程吗?

来自分类Dev

您可以使用Swift ARC快速分配稀缺资源(文件描述符,网络套接字)吗?

来自分类Dev

在多个客户端javascript文件之间传递套接字

来自分类Dev

多个套接字客户端

来自分类Dev

C服务器客户端错误的文件描述符

来自分类Dev

两个文件描述符(客户端)之间的通信

来自分类Dev

epoll-轮询多个文件描述符(即套接字)

来自分类Dev

“多个文件描述符引用同一个套接字”是如何创建的?

来自分类Dev

文件描述符和套接字文件描述符之间的区别

来自分类Dev

由于哪个select()调用返回EBADF,有什么方法可以获取套接字描述符?

来自分类Dev

套接字编程:“接受:错误的文件描述符”

来自分类Dev

通过文件描述符构造套接字对象

来自分类Dev

通过Linux套接字发送文件描述符

来自分类Dev

跟踪套接字(文件)描述符回到绑定地址

来自分类Dev

Linux套接字错误文件描述符

来自分类Dev

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

来自分类Dev

什么是文件描述符/连接/套接字/ ip?

来自分类Dev

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

来自分类Dev

python使用套接字打开所有文件描述符

来自分类Dev

我可以在另一个线程等待此epoll描述符等待的同时向epoll描述符添加套接字吗?

来自分类Dev

为什么在服务器端和客户端同时调用recv和发送功能时使用客户端的文件描述符?

来自分类Dev

多个 UDP 套接字和多个客户端

来自分类Dev

接受客户端套接字并建立连接后,我可以关闭ServerSocket吗?

来自分类Dev

我们也可以从客户端套接字启用keepalive吗?

来自分类Dev

当我在套接字文件描述符上调用close时,关闭了多少个文件描述符?

来自分类Dev

当我在套接字文件描述符上调用close时,关闭了多少个文件描述符?

来自分类Dev

我可以在不关闭文件描述符的情况下打开多个popen吗?

来自分类Dev

C套接字客户端发送换行符

Related 相关文章

  1. 1

    Python 客户端-服务器套接字错误 [Errno 9] 错误的文件描述符

  2. 2

    套接字文件描述符可以传递给子进程吗?

  3. 3

    您可以使用Swift ARC快速分配稀缺资源(文件描述符,网络套接字)吗?

  4. 4

    在多个客户端javascript文件之间传递套接字

  5. 5

    多个套接字客户端

  6. 6

    C服务器客户端错误的文件描述符

  7. 7

    两个文件描述符(客户端)之间的通信

  8. 8

    epoll-轮询多个文件描述符(即套接字)

  9. 9

    “多个文件描述符引用同一个套接字”是如何创建的?

  10. 10

    文件描述符和套接字文件描述符之间的区别

  11. 11

    由于哪个select()调用返回EBADF,有什么方法可以获取套接字描述符?

  12. 12

    套接字编程:“接受:错误的文件描述符”

  13. 13

    通过文件描述符构造套接字对象

  14. 14

    通过Linux套接字发送文件描述符

  15. 15

    跟踪套接字(文件)描述符回到绑定地址

  16. 16

    Linux套接字错误文件描述符

  17. 17

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

  18. 18

    什么是文件描述符/连接/套接字/ ip?

  19. 19

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

  20. 20

    python使用套接字打开所有文件描述符

  21. 21

    我可以在另一个线程等待此epoll描述符等待的同时向epoll描述符添加套接字吗?

  22. 22

    为什么在服务器端和客户端同时调用recv和发送功能时使用客户端的文件描述符?

  23. 23

    多个 UDP 套接字和多个客户端

  24. 24

    接受客户端套接字并建立连接后,我可以关闭ServerSocket吗?

  25. 25

    我们也可以从客户端套接字启用keepalive吗?

  26. 26

    当我在套接字文件描述符上调用close时,关闭了多少个文件描述符?

  27. 27

    当我在套接字文件描述符上调用close时,关闭了多少个文件描述符?

  28. 28

    我可以在不关闭文件描述符的情况下打开多个popen吗?

  29. 29

    C套接字客户端发送换行符

热门标签

归档