C 中的套接字“监听”错误

use*_*611 2 sockets irc server

我正在尝试使用 TCP IP 协议创建服务器

但它不接受连接,或者可能是因为监听

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <netdb.h>
#include <strings.h>
#include <arpa/inet.h>
#include <unistd.h>

void error(char *msg)
{
perror(msg);
exit(1);
}
int main(int argc, char *argv[])
{
    int sockfd,newsockfd,num_port,serveur_T;
    socklen_t client_T;
    char buffer[200];
    struct sockaddr_in adr_serveur, adr_client;
    int n;


    if (argc < 2)
    {
        fprintf(stderr, "nombre d'arguments est insuffisant\n");
        exit(1);
    }
    sockfd=socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0)
    {
        error("erreur de creation de socket");
    }

    serveur_T=sizeof(adr_serveur);
    bzero((char*)&adr_serveur, serveur_T);
    num_port=atoi(argv[1]);

    adr_serveur.sin_family=AF_INET;
    adr_serveur.sin_addr.s_addr=INADDR_ANY;
    adr_serveur.sin_port=htons(num_port);

    serveur_T=sizeof(adr_serveur);
    if (bind ( sockfd,(struct sockaddr *) &adr_serveur,serveur_T)<0)
    {
        error(" Erreur de binding");
    }

    listen (sockfd,5);
    client_T= sizeof(adr_client);
    newsockfd= accept(sockfd,(struct sockaddr *) &adr_client,&client_T);

    if ( newsockfd<0)
    {
        error("Erreur socket accept");
    }
    bzero(buffer, 200);



return 0;}
Run Code Online (Sandbox Code Playgroud)

当我执行服务器时出现此错误

Erreur socket accept: Operation not supported
Run Code Online (Sandbox Code Playgroud)

第二个问题:我可以使用 IRC 客户端并将其连接到我的服务器吗?在我的学校,我们有 Linux 服务器,所以我想知道是否可以将它们用作主机名?谢谢

Rem*_*eau 8

我正在尝试使用 TCP IP 协议创建服务器

您创建了一个SOCK_DGRAM(UDP) 套接字,而不是SOCK_STREAM(TCP) 套接字。您不能在 UDP 套接字上 调用listen()或,只能在 TCP 套接字上调用 或 。正在报告错误:accept()listen()EOPNOTSUPP

听(2)

EOPNOTSUPP套接字不属于支持listen()
操作 的类型。

您忽略该错误,然后accept()报告相同的错误:

接受(2)

EOPNOTSUPP
引用的套接字不是SOCK_STREAM类型。

UDP 中没有连接,所以没有什么可以接受的。将 UDP 套接字绑定到端口后,您可以开始对其进行recvfrom()调用。sendto()

为了将 IRC 客户端连接到此服务器代码,您需要将套接字类型更改为SOCK_STREAM. IRC 运行在 TCP 上,而不是 UDP 上。