gpt4 book ai didi

c - 监听:操作不支持错误

转载 作者:行者123 更新时间:2023-11-30 15:38:29 33 4
gpt4 key购买 nike

我正在使用 C 编程语言在 Ubuntu 中开发原始套接字程序。由于我使用原始套接字,因此需要使用 SOCK_RAW 类型而不是 SOCK_STREAM。使用 SOCK_RAW 反过来会通过抛出

来禁止我使用 listen()
"Listen:Operation not supported error".

我该如何纠正这个问题? 以下是我正在编写的代码:

<header files>
.
.
if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_RAW))==-1)
{
perror("Socket");
exit(1);
}
if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&true,sizeof(true))==-1)
{
perror("Setsockopt");
exit(1);
}
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(9392);
server_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_addr.sin_zero),8);
if(bind(sock,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1)
{
perror("Unable to bind");
exit(1);
}
if(listen(sock,5)==-1)
{
perror("Listen");
exit(1);
}
printf("\nTCP Server waiting for client on port 9392");
fflush(stdout);
while(1)
{
sin_size=sizeof(struct sockaddr_in);
connected=accept(sock,(struct sockaddr *)&client_addr,&sin_size);
printf("\nI got a connection from (%s,%d)",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
while(1)
{
printf("\nSEND (q or Q to quit):");
scanf("%s",send_data);
if(strcmp(send_data,"q")==0||strcmp(send_data,"Q")==0)
{
send(connected,send_data,strlen(send_data),0);
close(connected);
exit(0);
}
else
send(connected,send_data,strlen(send_data),0);
bytes_recieved=recv(connected,recv_data,1024,0);
recv_data[bytes_recieved]='\0';
.
.
.
.

最佳答案

这是因为原始套接字不支持“Listen()”。

请检查this

关于c - 监听:操作不支持错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21723080/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com