C 中的套接字 'listen' 错误
socket 'listen' error in C
我正在尝试使用 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;}
当我执行服务器时出现此错误
Erreur socket accept: Operation not supported
第二个问题:我可以使用 IRC 客户端并将其连接到我的服务器吗?在我的学校,我们有 Linux 个服务器,所以我想知道我是否可以将它们用作主机名?
谢谢
i'm trying to create server with TCP IP protocol
您创建了一个 SOCK_DGRAM
(UDP) 套接字,而不是 SOCK_STREAM
(TCP) 套接字。您不能在 UDP 套接字上调用 listen()
或 accept()
,只能在 TCP 套接字上调用。 listen()
正在报告 EOPNOTSUPP
错误:
EOPNOTSUPP
The socket is not of a type that supports the listen() operation.
您忽略了该错误,然后 accept()
报告了相同的错误:
EOPNOTSUPP
The referenced socket is not of type SOCK_STREAM.
UDP中没有连接,所以没有什么可以接受的。一旦将 UDP 套接字绑定到端口,就可以开始在其上调用 recvfrom()
和 sendto()
。
为了将 IRC 客户端连接到此服务器代码,您需要将套接字类型更改为 SOCK_STREAM
。 IRC 在 TCP 上运行,而不是在 UDP 上运行。
我正在尝试使用 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;}
当我执行服务器时出现此错误
Erreur socket accept: Operation not supported
第二个问题:我可以使用 IRC 客户端并将其连接到我的服务器吗?在我的学校,我们有 Linux 个服务器,所以我想知道我是否可以将它们用作主机名? 谢谢
i'm trying to create server with TCP IP protocol
您创建了一个 SOCK_DGRAM
(UDP) 套接字,而不是 SOCK_STREAM
(TCP) 套接字。您不能在 UDP 套接字上调用 listen()
或 accept()
,只能在 TCP 套接字上调用。 listen()
正在报告 EOPNOTSUPP
错误:
EOPNOTSUPP
The socket is not of a type that supports the listen() operation.
您忽略了该错误,然后 accept()
报告了相同的错误:
EOPNOTSUPP
The referenced socket is not of type SOCK_STREAM.
UDP中没有连接,所以没有什么可以接受的。一旦将 UDP 套接字绑定到端口,就可以开始在其上调用 recvfrom()
和 sendto()
。
为了将 IRC 客户端连接到此服务器代码,您需要将套接字类型更改为 SOCK_STREAM
。 IRC 在 TCP 上运行,而不是在 UDP 上运行。